home *** CD-ROM | disk | FTP | other *** search
Text File | 1988-05-29 | 233.3 KB | 5,912 lines |
-
-
-
-
-
-
-
-
-
-
-
-
-
- THE ADVENTURE GAME TOOLKIT
-
-
-
-
-
-
- By
-
-
- David R. Malmberg
-
- and
-
- Mark J. Welch
-
-
-
-
- Distributed by
-
- Softworks
- 43064 Via Moraga
- Mission San Jose, California
- 94539
-
- (415) 659-0533
-
-
-
-
-
-
-
-
-
-
- The Adventure Game Toolkit (AGT), including all source code, object code, and
- manuals on paper or on disk, is copyright 1987 and 1988 by Mark J. Welch and
- David R. Malmberg. Portions originally copyright 1985 and 1986 by Mark J.
- Welch.
-
-
-
- COPYRIGHT, TRADEMARKS AND WARRANTY
-
-
- COPYRIGHT:
- The Adventure Game Toolkit is a copyrighted work, just like a book. It
- is protected by United States copyright law and by applicable international
- treaty provisions. All text, program, and source code files on disk(s) are
- copyright 1987 and 1988 by Mark J. Welch and David R. Malmberg. Portions of
- the manual and source code are copyright 1985 and 1986 by Mark J. Welch.
-
-
- TRADEMARKS:
- "Adventure Game Toolkit" and "AGT" are trademarks of Mark J. Welch and
- David R. Malmberg.
-
-
- WARRANTY:
- The program disk(s) and printed manual are warranted to be free from
- defects in materials and workmanship for a period of 90 days from the date of
- purchase. In the event of a defect, registered users of AGT may obtain a
- replacement copy of the program disk(s) and/or manual from Softworks. The
- remedy for any breach of warranty shall be limited to replacement or refund
- and shall not encompass any other damages, including but not limited to loss
- of profit, special, incidental, consequential, or other similar claims.
-
-
- DISCLAIMER:
- THE ADVENTURE GAME TOOLKIT (AGT) COMES WITH NO OTHER WARRANTIES OF ANY
- KIND, INCLUDING WARRANTY OF MERCHANTABILITY OR OF FITNESS FOR A PARTICULAR
- PURPOSE. THE ADVENTURE GAME TOOLKIT (AGT) IS AVAILABLE AS IS. IN NO EVENT
- WILL THE AUTHORS BE LIABLE FOR DAMAGES, INCLUDING ANY LOST PROFITS OR
- INCIDENTAL AND CONSEQUENTIAL DAMAGES, EVEN IF THE AUTHORS HAVE BEEN ADVISED OF
- THE POSSIBILITY OF SUCH DAMAGES.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- i
-
-
- LICENSE TERMS (Shareware Rules)
-
- The Adventure Game Toolkit (AGT) is NOT public domain or free software,
- but is being distributed as "Shareware". This means that if you are a regular
- user of AGT, you should pay for your copy and become a registered user. Only
- from the income from your registration fees can the authors continue to
- provide product support, make enhancements to AGT, and stay in business.
- Non-registered users of this software are granted a limited license to
- make an evaluation copy for trial use on a private non-commercial basis, for
- the express purpose of determining whether AGT is suitable for their needs.
- At the end of this trial period, the user should either register his/her copy
- of AGT or discontinue using it.
- Registered users of AGT may use AGT on any computer, provided that AGT is
- used on only one computer at a time, and that the copy is not routinely used
- on that computer by other people. If other people use the copy of AGT
- routinely, they should become registered users themselves. Registered AGT
- users may make archival and working copies of the AGT program disk(s) to back
- up their software and protect their investment. They may also make evaluation
- copies of AGT for trial use by non-registered users, subject to the terms
- outlined above.
- Operators of electronic bulletin boards (Sysops) are encouraged to post
- the Adventure Game Toolkit and related Adventure Game files for downloading
- by their users. However, if these bulletin boards also offer AGT-based games
- for "On-Line" or "Doors" play, these Sysops should register their copy of AGT
- because they are using AGT on a routine basis. Such registration will entitle
- these Sysops to receive a version of AGT especially tailored for use on
- bulletin boards, plus copies of all of the latest AGT games.
- This license to use AGT does NOT include the right to distribute or sell
- AGT. Distribution terms are detailed below.
- AGT may be uploaded to and downloaded from commercial systems such as
- CompuServe, the Source, and BIX, so long as the only charge paid by the
- subscriber is for on-line time and there is no charge for the program. Those
- copying, sharing, and/or electronically transmitting the program are required
- not to delete or modify the copyright notice and restrictive notices from the
- program or documentation; anyone doing so will be treated as a contributory
- copyright violator.
- The Adventure Game Toolkit documentation may not be modified by users.
- The program may not be separated from the documentation when distributed.
- Printed or "Xeroxed" copies of the AGT documentation (i.e., this manual) may
- not be distributed or sold without the written permission of Softworks.
-
-
- Distribution of AGT by game authors:
- Authors of AGT games may distribute the AGT "driver" program, RUN.EXE,
- with their games for the purpose of playing games written using the Adventure
- Game Toolkit. If the game will be widely distributed, we ask that you request
- written permission and send us a copy of your game so we can notify you of
- updates or changes to AGT, especially changes that may affect your game. If
- your game will be commercially distributed, you must obtain a written license
- to distribute RUN.EXE; there is a one-time fee of $10 for this license for
- commercial distribution.
-
-
- Distribution of AGT by disk vendors and computer dealers:
- Distributors of "public domain" or user-supported software libraries must
- obtain written permission to distribute copies of AGT and related adventure
- game files. No one may use AGT as a promotion for any commercial venture or
-
- ii
-
- as an enticement for the user to pay for any program, product, or service
- unless they have received the express written permission of the program's
- authors.
-
- In order to distribute AGT, a dealer or disk vendor must comply with the
- following conditions:
- (1) You must obtain written permission from Softworks to distribute AGT.
- If you receive no reply, write again: our silence does NOT constitute
- permission, and you may not distribute "pending" receipt of permission.
- (2) A fee of not more than $7 may be charged for each disk sold. This
- includes "multi-disk" volumes: AGT may not be included on any disk sold for
- more than $7, including CD-ROM or optical disks, without express written
- permission from Softworks.
- (3) Vendors may not modify or delete ANY files on the disk. Vendors may
- add a "GO" program, and/or a reasonable number of small text files designed to
- assist or provide a service to the user, but these added files must be easily
- identifiable and end-users must be allowed to delete the added files.
- (4) Vendors must make a reasonable effort to distribute only the most
- recent versions of AGT. All vendors who have requested and received written
- permission to distribute AGT will be notified of updates as they are
- released.
- (5) All disk vendors must comply with any and all vendor guidelines or
- vendor requirements set forth by the Association of Shareware Professionals
- (ASP); for more information about ASP, contact its chairman, Jim Button, at
- Buttonware in Seattle. Violation of any ASP guideline or requirement
- automatically revokes permission to distribute AGT.
- Until formal requirements are adopted by the ASP, you must comply with
- the following guidelines: Vendors must make an attempt to educate users on the
- nature of Shareware. Catalogs, advertisements, order forms, and all disks
- sold should contain ASP-approved or recommended wording describing the nature
- of shareware, and should explicitly state that no part of disk sale revenues
- are paid to the programs' authors. Vendors may not advertise under the
- heading "Public Domain Software", "Free Software," or the equivalent. When
- vendor catalogs or advertisements carry both Shareware and PD programs, the
- Shareware programs must be differentiated from the public domain programs in
- some way (in the description, with an asterisk, by listing the registration
- fee, etc.).
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- iii
-
- ADVENTURE GAME TOOLKIT (AGT) REGISTRATION/ORDER FORM
-
-
- Remit to:
- Softworks
- 43064 Via Moraga
- Mission San Jose, California 94539
-
- You can also order by phone using your Mastercard or VISA by dialing
- (415) 659-0533, 12:00 Noon to 9:00 PM., PST ONLY, Monday to Friday.
-
-
- ___ AGT Registration ................................. @ $ 20.00 ea $ ______
- includes: (1) Notice of all future AGT upgrades, new AGT Adventures
- and related AGT products. (2) Latest version of the program, sample
- Adventure game source files (CAVE, CRUSADE, UNDERGND, ALICE and
- others), and summary documentation on disk. Over one megabyte of
- program and data files -- ARCed on two disks. Normally, these disks
- will not be sent until the next AGT upgrade. If you wish these disks
- sent immediately, put a check mark here -------------------------> ______
- (3) Telephone support from 7:00 to 9:00 PST (M-F). (4) A warm glow
- from having supported at least one of the many Shareware products
- you probably use. (5) The AGT authors' eternal gratitude.
-
- ___ Above with printed AGT manual .................... @ $ 35.00 ea $ ______
- includes: Above items plus printed manual about 150 pages long with
- numerous detailed examples on how to use the Adventure Game Toolkit
- to create very professional and very clever Adventure games.
- The printed AGT manual has approximately 150% the amount of
- information as contained in the summary disk documentation.
-
- ___ Printed AGT manual (Only) ........................ @ $ 20.00 ea $ ______
-
- ___ UPGRADE to the newest AGT version (Only) ......... @ $ 12.00 ea $ ______
- includes: Latest version of the program, sample Adventure game
- source files (CAVE, CRUSADE, UNDERGND, ALICE and others), and
- summary documentation on disk. Over one megabyte of program and
- data files -- ARCed on two disks.
-
- ___ AGT Turbo Pascal 4.0 source code ................. @ $ 50.00 ea $ ______
- includes: Turbo Pascal 4.0 source code for AGT's COMPILE and RUN
- programs. Over 10,000 lines of Turbo Pascal source code. YOU
- MUST BE A REGISTERED AGT USER TO ORDER THE SOURCE CODE!
-
- Orders are normally shipped by US mail at no additional charge.
-
- For UPS shipment, please add $3.00..................@ $ 3.00 ea $ ______
-
- For shipments outside the United States, please add @ $ 5.00 ea $ ______
-
- Subtotal ______
-
- (California residents please add 7% sales tax) Tax ______
-
- Total $ ______
-
- Payment by: ( ) Check ( ) MasterCard ( ) VISA ( ) Cash
-
-
- iv
-
- ADVENTURE GAME TOOLKIT (AGT) REGISTRATION/ORDER FORM -- PAGE 2
-
-
- Name: ____________________________________________________________
-
- Company: ____________________________________________________________
-
- Address: ____________________________________________________________
-
- : ____________________________________________________________
-
- State: ___________________________ Zip:____________________________
-
- Day Phone: _________________________ Eve: ___________________________
-
- Card #: _________________________________ Exp. Date: _______________
-
- Signature of cardholder: ____________________________________________
-
- ------------------------ User comments ------------------------------
-
- I acquired the Adventure Game Toolkit (AGT) from
- [ ] - Friend [ ] - Disk Vendor
- [ ] - Computer Club [ ] - Computer Store
- [ ] - CompuServe [ ] - BIX
- [ ] - GEnie [ ] - The Source
- [ ] - Electronic Bulletin Board
- [ ] - Other - Please Specify ________________________________
-
- We would also appreciate any input you would care to give concerning
- AGT. If you have any ideas or comments that would make AGT a better
- system, then please let us know.
-
- We value your comments and/or suggestions:
-
-
- ____________________________________________________________________
-
- ____________________________________________________________________
-
- ____________________________________________________________________
-
- ____________________________________________________________________
-
- ____________________________________________________________________
-
- ____________________________________________________________________
-
- ____________________________________________________________________
-
- ____________________________________________________________________
-
- ____________________________________________________________________
-
- ____________________________________________________________________
-
-
-
-
- v
-
-
- ADVENTURE GAME TOOLKIT PRODUCT/TECHNICAL SUPPORT
-
-
- Softworks will make every reasonable effort to fix AGT bugs, and help
- registered users by answering technical and other AGT related questions. This
- Product/Technical support for AGT is available to registered users (only) in
- several forms:
-
- (1) By leaving a message in the 'Softworks' forum on BIX (the BYTE
- Information Exchange).
-
- (2) By telephone to David Malmberg at Softworks, Monday through Friday
- from 7:00 PM to 9:00 PM (Pacific Coast Time) at (415) 659-0533.
- Please respect these hours!
-
- (3) By CompuServe E-Mail to David Malmberg, CompuServe ID 73435,1277.
-
- (4) By letter to: Softworks
- 43064 Via Moraga
- Mission San Jose, California
- 94539
-
- If you send disks or listings that you wish returned, be sure to
- enclosed a self-addressed, stamped envelope (SASE) with sufficient
- postage. If you do not enclose a SASE, your material will not be
- returned.
-
- Regardless of the method you use to solicit AGT support, if you are having a
- problem and you can not get AGT to do what you think it should do, please
- provide background information on the following:
-
- (1) The version of AGT you are using.
-
- (2) The computer system you are using.
-
- (3) Your system's configuration, i.e., amount of RAM, number and type of
- disk drives, the type of monitor you are using.
-
- (4) Any memory resident programs you have installed at the same time you
- are using AGT and a "rough idea" of what they do and how much memory
- they take.
-
- (5) Your problem, i.e., what is happening vs. what you think should be
- happening.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- vi
-
-
- TABLE OF CONTENTS
-
-
- COPYRIGHT, TRADEMARKS AND WARRANTY . . . . . . . . . . . . . . . . . . . . i
-
- LICENSE TERMS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ii
-
- ADVENTURE GAME TOOLKIT (AGT) REGISTRATION/ORDER FORM . . . . . . . . . . . iv
-
- ADVENTURE GAME TOOLKIT PRODUCT/TECHNICAL SUPPORT . . . . . . . . . . . . . vi
-
- PART 1: INTRODUCTION . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
- FEATURES OF THE ADVENTURE GAME TOOLKIT . . . . . . . . . . . . . . . 1
- STRUCTURE OF THIS MANUAL . . . . . . . . . . . . . . . . . . . . . . 2
- HARDWARE REQUIREMENTS FOR AGT . . . . . . . . . . . . . . . . . . . 3
- QUICK START FOR PLAYING ONE OF THE AGT GAMES . . . . . . . . . . . . 3
- ADVENTURE GAME TOOLKIT FILES . . . . . . . . . . . . . . . . . . . . 4
- FILES NEEDED TO COMPILE AN AGT ADVENTURE . . . . . . . . . . . . 4
- COMPILED OR FINAL VERSION FILES . . . . . . . . . . . . . . . . 5
- SAMPLE AGT ADVENTURE GAME FILES . . . . . . . . . . . . . . . . 6
- HOW TO PLAY THE ADVENTURE GAME(S) PROVIDED WITH AGT . . . . . . . . . 7
- VOCABULARY . . . . . . . . . . . . . . . . . . . . . . . . 7
- STANDARD LEVEL VERBS . . . . . . . . . . . . . . . . . . . . . . 8
- SOME GENERAL COMMENTS ABOUT COMMANDS . . . . . . . . . . . . . 10
- ABBREVIATIONS AND FUNCTION KEYS . . . . . . . . . . . . . . . . 10
- SPECIAL WORDS . . . . . . . . . . . . . . . . . . . . . . . . . 10
- NOUNS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
- NOISE WORDS . . . . . . . . . . . . . . . . . . . . . . . . . . 11
- PREPOSITIONAL PHRASES . . . . . . . . . . . . . . . . . . . . . 11
- COMMAND LINE OPTIONS . . . . . . . . . . . . . . . . . . . . . . 11
-
- PART 2: HOW TO WRITE AN ADVENTURE GAME . . . . . . . . . . . . . . . . 13
- INTRODUCTION: WHY SHOULD I WRITE MY OWN ADVENTURE GAME? . . . . . . 13
- HOW AN AGT ADVENTURE GAME WORKS . . . . . . . . . . . . . . . . . . 13
- AN OVERVIEW . . . . . . . . . . . . . . . . . . . . . . . . . . 13
- STANDARD LEVEL GAME FILES . . . . . . . . . . . . . . . . . . . 15
- TITLE FILES . . . . . . . . . . . . . . . . . . . . . . . . . . 15
- SETTING SCREEN COLORS . . . . . . . . . . . . . . . . . . . . . 15
- INSTRUCTIONS FILES . . . . . . . . . . . . . . . . . . . . . . . 16
- THE WORK-HORSE .DAT FILE . . . . . . . . . . . . . . . . . . . . 17
- ROOMS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
- HELP MESSAGES . . . . . . . . . . . . . . . . . . . . . . . . . 18
- NOUNS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
- TEXT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
- MULTIPLE NOUNS WITH THE SAME NAME . . . . . . . . . . . . . . . 21
- PUSH, PULL, TURN, AND PLAY DESCRIPTIONS . . . . . . . . . . . . 22
- EATING, DRINKING, AND DYING . . . . . . . . . . . . . . . . . . 23
- WEIGHT AND SIZE . . . . . . . . . . . . . . . . . . . . . . . . 23
- LIGHT AND DARKNESS . . . . . . . . . . . . . . . . . . . . . . . 23
- CREATURES . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
- GROUPS OF CREATURES . . . . . . . . . . . . . . . . . . . . . . 26
- SPECIALS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
- "SPECIAL" SPECIALS . . . . . . . . . . . . . . . . . . . . . . . 27
- CREATING A TYPICAL ROOM . . . . . . . . . . . . . . . . . . . . . . 29
- SCORING . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
- OTHER DATA ITEMS IN THE .DAT FILE . . . . . . . . . . . . . . . . . 32
- INTRODUCTION or INTRO TEXT . . . . . . . . . . . . . . . . . . . 32
-
- vii
-
- STARTING ROOM . . . . . . . . . . . . . . . . . . . . . . . . . 32
- TREASURE ROOM . . . . . . . . . . . . . . . . . . . . . . . . . 32
- VERB SYNONYMS . . . . . . . . . . . . . . . . . . . . . . . . . 32
- WARNING . . . . . . . . . . . . . . . . . . . . . . . . . . 33
- GAME_WIN . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
- GAME_END . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
- PAGE PAUSES . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
- ORDER OF DEFINITIONS . . . . . . . . . . . . . . . . . . . . . . . . 34
- HOW TO INCLUDE COMMENTS IN YOUR AGT DATA FILES . . . . . . . . . . . 34
- CREATING YOUR SOURCE DATA FILES WITH WORD PROCESSORS . . . . . . . . 35
-
- PART 3: USING META-COMMANDS IN PROFESSIONAL LEVEL ADVENTURE GAMES . . . . 36
- CUSTOM USER-DEFINED VERBS . . . . . . . . . . . . . . . . . . . . . . 36
- MAXIMUM_SCORE . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
- .MSG -- MESSAGE FILES . . . . . . . . . . . . . . . . . . . . . . . 38
- A TYPICAL GAME TURN FOR PROFESSIONAL LEVEL GAMES . . . . . . . . . . 38
- INTRODUCTION TO META-COMMANDS . . . . . . . . . . . . . . . . . . . . 41
- THE FORMAT OF META-COMMANDS . . . . . . . . . . . . . . . . . . . . . 42
- META-COMMANDS CONDITIONAL TESTS . . . . . . . . . . . . . . . . . . . 44
- PLAYER CONDITIONS . . . . . . . . . . . . . . . . . . . . . . . 44
- ITEM(S) CONDITIONS . . . . . . . . . . . . . . . . . . . . . . . 45
- NOUN CONDITIONS . . . . . . . . . . . . . . . . . . . . . . . . 46
- MISCELLANEOUS CONDITIONS . . . . . . . . . . . . . . . . . . . . 47
- META-COMMANDS ACTION TOKENS . . . . . . . . . . . . . . . . . . . . . 48
- PLAYER ACTION TOKENS . . . . . . . . . . . . . . . . . . . . . . 48
- A WORD OF WARNING . . . . . . . . . . . . . . . . . . . . . . . 49
- ITEM/NOUN/LOCATION ACTION TOKENS . . . . . . . . . . . . . . . . 49
- MISCELLANEOUS ACTION TOKENS . . . . . . . . . . . . . . . . . . 50
- SPECIAL META-COMMAND SITUATIONS . . . . . . . . . . . . . . . . . . . 51
- FLAGS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
- DEBUG FLAG . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
- COUNTERS . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
- VARIABLES . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
- NUMBER INPUT . . . . . . . . . . . . . . . . . . . . . . . . . . 54
- ASKING AND ANSWERING QUESTIONS . . . . . . . . . . . . . . . . . 55
- OPENING AND CLOSING PASSAGEWAYS BETWEEN ROOMS . . . . . . . . . 56
- META-COMMAND REDIRECTION . . . . . . . . . . . . . . . . . . . . . . 57
-
- PART 4: SAMPLE AGT META-COMMAND SCENARIOS . . . . . . . . . . . . . . . 61
- SCENARIO 1: "FIND" VERB ACTIONS . . . . . . . . . . . . . . . . . . 61
- SCENARIO 2: RANDOM ACTIVITIES BY GUARD . . . . . . . . . . . . . . . 63
- SCENARIO 3: INTERACTION WITH CHARACTERS . . . . . . . . . . . . . . . 69
-
- APPENDIX A: STANDARD LEVEL VERBS UNDERSTOOD BY AGT . . . . . . . . . . . 77
-
- APPENDIX B: META-COMMANDS CONDITIONAL TESTS . . . . . . . . . . . . . . 79
- PLAYER CONDITIONS . . . . . . . . . . . . . . . . . . . . . . . . . . 79
- ITEM(S) CONDITIONS . . . . . . . . . . . . . . . . . . . . . . . . . 79
- NOUN CONDITIONS . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
- MISCELLANEOUS CONDITIONS . . . . . . . . . . . . . . . . . . . . . . 81
-
- APPENDIX C: META-COMMANDS ACTION TOKENS . . . . . . . . . . . . . . . . 82
- PLAYER ACTION TOKENS . . . . . . . . . . . . . . . . . . . . . . . . 82
- ITEM/NOUN/LOCATION ACTION TOKENS . . . . . . . . . . . . . . . . . . 82
- MISCELLANEOUS ACTION TOKENS . . . . . . . . . . . . . . . . . . . . . 83
-
- APPENDIX D: AGT ERROR MESSAGES . . . . . . . . . . . . . . . . . . . . . 84
- ERRORS DURING GAME COMPILATION . . . . . . . . . . . . . . . . . . . 84
-
- viii
-
- ERRORS DURING RESTORING GAME . . . . . . . . . . . . . . . . . . . . 84
- ERRORS DURING GAME PLAY . . . . . . . . . . . . . . . . . . . . . . 84
-
- APPENDIX E: VALUE RANGES FOR GAME DEFINITIONS . . . . . . . . . . . . . . 86
-
- APPENDIX F: ABOUT THE AUTHORS . . . . . . . . . . . . . . . . . . . . . . 87
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- ix
-
-
- PART 1: INTRODUCTION
-
-
- The Adventure Game Toolkit is designed to allow you to create and play your
- own text adventure games. Once created, your adventure games can be shared
- with and enjoyed by others -- even if they do not have a copy of the Adventure
- Game Toolkit themselves.
-
- The Adventure Game Toolkit (AGT) began life as a program by Mark Welch called
- the Generic Adventure Game System (GAGS). Using GAGS it was possible for the
- non-programmer to develop complete adventure games using a fixed (but
- relatively large) vocabulary of action verbs. David Malmberg took GAGS and
- made a number of enhancements including the ability to customize the
- vocabulary and to program complex conditional tests and a rich assortment of
- actions and messages using a special meta-language (designed specifically for
- adventure games). The current Adventure Game Toolkit combines the best
- features of both approaches to enable the user to create two distinct levels
- of adventure games:
-
- (1) Standard Level games that require no programming experience
- (honestly!), only a fertile imagination. These Standard Level games
- follow the original GAGS format and only require that the user
- generate the game using a word processor or text editor to describe
- the various locations, objects and results of actions that
- collectively make up the game.
-
- (2) Professional Level games that also make use of the special adventure
- game meta-language to create games as complex and rich as the game
- designer's imagination and prose style will allow. These games
- should be technically comparable with the published text adventure
- games from firms like Infocom.
-
-
- FEATURES OF THE ADVENTURE GAME TOOLKIT
-
- AGT has a number of features that make it a very comprehensive adventure
- product. These features make AGT more powerful, more professional and easier
- to use than any previously available Adventure Game development system. Some
- of these key features are:
-
- POWERFUL
-
- * Big, complex games with up to 200 locations, 100 inanimate
- objects (e.g., treasures, swords, lakes, trees, books, etc.) and
- 100 animate objects (e.g., people, animals or creatures).
-
- * Large standard vocabulary with potential to define many more
- words unique to a specific adventure. Typical games can have a
- vocabulary of 400 words or more.
-
- * Sophisticated parser that can understand (1) complex input
- commands including pronouns (IT, HIM, HER, THEM, MY and ITS),
- and (2) compound commands separated by AND or THEN or
- punctuation symbols, and (3) commands addressed to characters
- within the game. Here are a few examples of commands AGT can
- handle with ease:
-
-
- 1
-
- GET THE FLASH LIGHT AND THEN SWITCH IT ON
- DROP THE FOOD, THE KEY AND THE BOTTLE THEN UNLOCK THE DOOR
- WITH THE BRASS KEY AND THEN LEAVE
- PUT ON THE CLOAK, THEN EXAMINE IT; READ ITS LABEL
- PLACE THE GREEN ROCK AND THE SMALL PEBBLE BEHIND THE TREE
- ENTER THE HOUSE; GET ALL; EXIT; SOUTH; SOUTH THEN DOWN
- SULU, SET A COURSE FOR ALPHA 14
- SCOTTY, BEAM DOWN A TRICORDER AND THE QWERTY MODULE
-
- * Special, English-like meta-language (especially developed for
- writing Adventure games) that gives the game designer total
- control and flexibility in the development of his/her games.
-
- * Source code available to Registered Users. Over 10,000 lines of
- Turbo Pascal 4.0 that may be customized to fit the game
- designer's unique needs.
-
- PROFESSIONAL
-
- * "Look and feel" of Infocom adventure games with similar screen
- layout and standard vocabulary and routines.
-
- * Automatic screen adaptation to use either a color or a
- monochrome monitor. Color combinations may be specified by the
- game designer or by the player during the game.
-
- * Predefined function and cursor keys to input frequently used
- commands and move directions.
-
- * SCRIPT and UNSCRIPT commands to echo game output to printer.
-
- EASY-TO-USE
-
- * Large library of completed games that can be enjoyed simply as
- great entertainment or used as a platform by the game designer
- to build upon and/or learn from.
-
- * Professionally written documentation totalling about 150 pages.
- Has numerous examples that unveil the "secrets" of great
- adventure writers.
-
- * Total compatibility with GAGS.
-
-
- STRUCTURE OF THIS MANUAL
-
- PART 1 (the section you are reading) gives an overview of the Adventure Game
- Toolkit, the various files on the disk(s), and explains how to play the
- adventure games created by the AGT.
-
- PART 2 gives a number of pointers on how to create a good adventure game. It
- also explains the way AGT defines an adventure game in terms of files and game
- data elements like Rooms, Nouns, and Creatures and gives several examples of
- each.
-
- PART 3 explains the use of AGT's unique meta-language and how it can be used
- to create Professional Level adventure games. Numerous examples are given.
-
-
- 2
-
- PART 4 presents several detailed scenarios where meta-language commands have
- been used to create typical adventure games situations, like: (1) random
- attacks by a villain, (2) how to expand the game's vocabulary to include new
- verbs and actions, and (3) how to allow for interaction between the player and
- various characters in the game.
-
- The final part of the manual is a series of Appendices that give detailed
- information on a number of specific AGT topics for easy reference.
-
-
- HARDWARE REQUIREMENTS FOR AGT
-
- The games created by the Adventure Game Toolkit requires an IBM-compatible
- computer with at least 384K of memory, MS-DOS 2.1, and at least one disk
- drive. You may use any kind of monitor and AGT will automatically adjust its
- output to best suit your monitor.
-
-
- QUICK START FOR PLAYING ONE OF THE AGT GAMES
-
- If you've never played an adventure game before, the best way to start to
- understand how an adventure game works is to play one. Before you can do
- that, however, there are a few things you should do first to protect your
- disk(s) and to create the final version of the game from the source files on
- the disk(s).
-
- Let's make a playable copy of CAVE (the AGT version of the famous "Colossal
- Cave" adventure game).
-
- 1. First, make a copy of the original disk(s) and put them in a safe place.
- That way, if you accidentally damage the disk(s) you're playing with, you can
- still re-copy the original(s). Check your DOS manual for the correct form of
- the COPY or DISKCOPY command that is appropriate for your particular system.
-
- 2. If there is a file on the disk(s) called READ.ME or README.AGT, read that
- file before going further. These files will have information on changes
- and/or features that have been made after the documentation was created.
-
- 3. Copy the following files to a new, formatted disk:
-
- COMPILE.EXE
- CAVE.DAT
- CAVE.CMD
- CAVE.MSG
-
- These are the "source" files for the CAVE adventure. Put this disk in the A:
- drive and make that drive the default drive by entering "A:<RETURN>". Then
- enter "COMPILE CAVE<RETURN>". AGT will then take 3 to 5 minutes to produce a
- finished version of the CAVE adventure on the same disk, by creating the
- following new files:
-
- CAVE.D$$
- CAVE.DA1
- CAVE.DA2
- CAVE.DA3
- CAVE.DA5
-
- These are the "compiled" or final files for CAVE that AGT has created.
-
- 3
-
-
- 4. Next, copy the following files to a new (different) formatted disk:
-
- RUN.EXE
- CAVE.TTL
- CAVE.INS
- CAVE.BAT
- CAVE.D$$
- CAVE.DA1
- CAVE.DA2
- CAVE.DA3
- CAVE.DA5
- ORDERFRM.AGT
-
- Then type "CAVE<RETURN>" at the DOS prompt to play the finished version of the
- "Colossal Cave" adventure created by AGT.
-
-
- ADVENTURE GAME TOOLKIT FILES
-
-
- FILES NEEDED TO COMPILE AN AGT ADVENTURE
-
- Included on the disk(s) are numerous files. If there is a file on the disk(s)
- called READ.ME or README.AGT, read that file before going further.
-
- In order to compile or create a finished adventure from your source files, you
- will need to put the following files on a new, formatted disk:
-
- - COMPILE.EXE The file COMPILE.EXE is the AGT program that converts your
- AGT "source" files into the "compiled" or final files
- needed to play the adventure.
-
- - *.DAT e.g., CRUSADE.DAT. Files with the extension (suffix) .DAT
- are source data files read by the COMPILE.EXE program when
- it is running.
-
- - *.CMD e.g., CRUSADE.CMD. Each file with the extension .CMD is a
- source data file containing a set of special meta-language
- commands for a corresponding game in a .DAT file. The use
- of a *.CMD file is unique to Professional Level adventure
- games. Games that do not use these Professional Level
- features (such as, the original GAGS games) would not have
- a *.CMD file.
-
- - *.MSG e.g., CRUSADE.MSG. Each file with the extension .MSG is a
- source data file containing a set of special messages for a
- corresponding game in a .DAT file. The use of a *.MSG file
- is unique to Professional Level adventure games. Games
- that do not use these Professional Level features (such as,
- the original GAGS games) would not have a *.MSG file.
-
- After these are on a new, formatted disk, you should enter the command
- "COMPILE GameName", e.g., "COMPILE CRUSADE". After a few minutes, AGT will
- pause and give you a message about how much space there is on your disk
- compared to how much space you need for the "final" or "compiled" version
- files. If you don't have enough space, the program will suggest you put in a
- clean (already formatted) disk, before it writes the final files.
-
- 4
-
-
-
- COMPILED OR FINAL VERSION FILES
-
- After the game has been compiled, you can create a final, playable disk for
- the game. This disk will have the following files:
-
- RUN.EXE This is the program "engine" that runs your compiled
- adventure game. RUN.EXE must be on the disk in order to
- play any compiled, final AGT game. All of the information
- that is unique to the adventure will be contained in
- compiled data files, described below:
-
- - *.BAT e.g., CRUSADE.BAT. Each file with the extension .BAT is
- used to start the final version of the game, i.e., it
- contains the DOS batch instruction "RUN GameName", e.g.,
- "RUN CRUSADE". *.BAT files are optional.
-
- - *.TTL e.g., CRUSADE.TTL. Each file with the extension .TTL
- contains the title file for a corresponding game file.
- (*.TTL files are optional)
-
- - *.INS e.g., CRUSADE.INS. Each file with the extension .INS
- contains a set of instructions for a corresponding game.
- (*.INS files are optional) If the game disk contains a
- *.INS file (i.e., CRUSADE.INS), the game will ask the
- player "Do you wish to see the instructions?" If the
- player answers with a YES or Y, the instruction file will
- be displayed. If the game disk does not contain a *.INS
- file, play begins normally at the starting location.
-
- - *.D$$ e.g., CRUSADE.D$$. Each file with the extension .D$$
- contains all the encrypted messages for the game. *.D$$
- files are NOT optional.
-
- - *.DA1 e.g., CRUSADE.DA1. Each file with the extension .DA1
- contains general data about the game. *.DA1 files are NOT
- optional.
-
- - *.DA2 e.g., CRUSADE.DA2. Each file with the extension .DA2
- contains encrypted data about the ROOMS in the game. *.DA2
- files are NOT optional.
-
- - *.DA3 e.g., CRUSADE.DA3. Each file with the extension .DA3
- contains encrypted data about the NOUNS in the game. *.DA3
- files are NOT optional.
-
- - *.DA4 e.g., CRUSADE.DA4. Each file with the extension .DA4
- contains encrypted data about the CREATURES in the game.
- *.DA4 files are NOT optional if you have CREATURES in the
- game. If there are no CREATURES, then no *.DA4 file will
- be created.
-
- - *.DA5 e.g., CRUSADE.DA5. Each file with the extension .DA5
- contains encrypted meta-language commands for the game.
- *.DA5 files are NOT optional if you have meta-language
- commands in the game. If there are no meta-language
- commands, then no *.DA5 file will be created.
-
- 5
-
-
- The final or compiled files of an adventure game take up less disk space than
- the source files and are encrypted. These files are not only safe from
- "peeking" and "prying" eyes, but have the advantage of loading very fast.
- Even the largest AGT game will load in about 15 seconds -- just long enough to
- read the title screen.
-
-
- SAMPLE AGT ADVENTURE GAME FILES
-
- Included with the other AGT files are three sample adventure games that use
- all the power of AGT including the special meta-language. The reader is
- encouraged to study these games for examples of how AGT can be used to
- accomplish a wide variety of Professional Level adventure game tasks and
- tricks. These games are:
-
- CAVE.* An AGT version of the original Crowther and Woods "Colossal
- Cave" Adventure Game.
-
- CRUSADE.* Rescue the princess from the evil Baron's dungeon.
-
- QUEST.* Recover your magic spells and amulets from Blackwing's Pit.
-
-
- In addition there are a number of Standard Level games that could have been
- created totally without any programming knowledge or experience:
-
- UNDERGND.* A game of survival after World War III. Uses all of the
- tricks of the original GAGS (Standard Level) adventures.
-
- ALICE.* An adventure using the characters from Alice In Wonderland.
- This game was the winning entry in the first annual GAGS
- game writing contest.
-
- DEENA.* A woman warrior's struggle to escape from the lecherous
- Gendi tribe. (R-rated)
-
- DRAGONS.* An adventure in the Sultan's palace with side trips to his
- dungeon, the torture chamber and the harem. (R-rated)
-
- FABLE.* An allegorical quest for meaning and understanding in life.
-
- GHOSTTWN.* Find and rescue the rancher's daughter from the mysterious
- ghost town. (R-rated)
-
- LOTTERY.* An adventure in San Francisco with emphasize on the "red
- light" district. (R-rated)
-
- CTA.* An allegorical adventure where you battle figures like
- "Unbelief", "Greed" and "Lust" using such weapons as the
- "Sword of the Spirit" and the "Staff of Righteousness".
-
- LASAR.* Seek out and destroy the threats to peace and prosperity in
- the Kingdom of Ellasal.
-
-
-
-
-
- 6
-
-
- HOW TO PLAY THE ADVENTURE GAME(S) PROVIDED WITH AGT
-
-
- VOCABULARY
-
- The Adventure Game Toolkit creates adventure games that understand a wide
- variety of commands. A typical AGT game might have a vocabulary totalling 400
- words or more.
-
- Your game's commands should generally be in the format:
-
- <verb phrase> <(multiple) noun phrase(s)> <preposition> <noun phrase/object>
-
- Verb phrases can consist of a simple verb like EAT, SHOOT, READ or a verb
- followed by a preposition such as CLIMB UP, JUMP THROUGH, or SWIM IN. Noun
- (or object) phrases can consist of a single word noun like TREE, ROCK, LAKE or
- a noun and its adjective such as RED ROCK, SMALL BOWL or UGLY MUTANT. Several
- nouns may be connected with AND's or commas. Articles like A, AN or THE are
- optional. The personal pronouns MY and ITS are also optional. The pronouns
- IT, THEM, HIM and HER may be used to refer to a previously mentioned noun.
-
- Here are some (hypothetical) examples of valid commands:
-
- PLACE A RED ROCK IN THE SMALL BOWL
- PUT THE GREEN ROCK AND THE SMALL PEBBLE BEHIND THE OAK TREE
- READ MY POETRY BOOK
- SWIM IN THE SWIMMING POOL
- EXAMINE THE GOLD RING, THE DWARF AND THE SILVER NECKLACE
- EAT THE CELERY, THE TUNA, THE APPLE AND THE ONION
- THROW THE BATTLE AXE AND THE LARGE ROCK AT THE WEREWOLF
- SHOOT THE BURGLAR WITH THE REVOLVER
- ATTACK HIM
- ("HIM" will refer to last noun mentioned, e.g., the burglar)
- FIRE THE LASER PISTOL AT THE ALIEN MUTANT
- GET THE BOOK (also: TAKE THE BOOK)
- READ IT
- ("IT" will refer to last noun mentioned, e.g., the book)
- GET ALL (will get everything movable at the current location)
- GET THE KEYS, BOTTLE, FOOD AND THE CLOAK
- EXAMINE THE KEYS, BOTTLE, FOOD AND CLOAK
- PUSH THE RED BUTTON AND THE GREEN BUTTON
- UNLOCK THE FILE CABINET WITH THE STEEL KEY
- JUMP THROUGH THE OPENING
- JUMP OVER THE LOG
- NORTH
- SOUTHWEST
- PLACE AN AXE AND THE SHIELD NEXT TO THE BIG TREE
- PUT THE FOOD ON THE KITCHEN TABLE
- TURN ON THE FLASHLIGHT
- LIGHT THE TORCH WITH THE WOODEN MATCHES
- SCREAM AT THE UGLY TROLL
- CLIMB UP THE LADDER
- EXTINGUISH THE FIRE (or PUT OUT THE FIRE)
- DRINK THE WHITE WINE
- THROW THE FIRE WOOD IN THE STOVE
- PULL THE BELL CORD
- WEAR THE STUPID HAT (also: PUT ON THE STUPID HAT)
-
- 7
-
- TAKE OFF THE HAT (also: REMOVE THE HAT)
- NE (for NORTHEAST)
- DROP THE KEY AND THE BOTTLE
- ENTER THE CAVE
- XYZZY (i.e., a "magic" word)
- TURN THE DOORKNOB
- PLAY WITH THE DOG
- TALK TO (or TALK WITH) THE OLD MAN (ABOUT THE WEATHER)
- TELL JEFF ABOUT THE SWORD
- ASK JODIE ABOUT THE CRIME
-
- Compound commands can be created by connecting single commands (like those
- above) with "AND", "THEN" or the punctuation symbols "," or ";" to connect two
- or more separate commands. However, "end-of-sentence" punctuation symbols
- like ".", "!" and "?" should not be used. Below are a few examples of valid
- compound commands:
-
- TURN THE DOORKNOB; OPEN THE DOOR THEN ENTER THE ROOM
- CLIMB DOWN THE LADDER THEN SOUTH, WEST AND NORTHWEST
- GET THE CLOAK AND THEN EXAMINE IT; READ THE LABEL
- DROP THE FOOD AND THE BOTTLE THEN UNLOCK THE DOOR AND THEN LEAVE
- GET THE TORCH, LIGHT IT WITH THE WOODEN MATCHES THEN EXAMINE IT
-
- AGT's parser also allows you to give commands to other characters in the game
- like these:
-
- SULU, SET A COURSE FOR ALPHA 14
- SCOTTY, BEAM DOWN A TRICORDER AND THE QWERTY MODULE
- HELMSMAN, RAISE THE DEFLECTOR SHIELDS
- BONES, COME TO THE BRIDGE
-
- The comma after the character's name is optional.
-
- One point of advice about command structure is in order. Your commands should
- be structured to follow the most "natural" sequence of words when two or more
- sequences are possible. For example, THROW THE GOLDEN EGGS TO THE TROLL will
- be understood by the AGT parser, whereas THROW TROLL THE EGGS will not be
- understood -- even though it is understandable to most humans as equivalent.
- Similarly, you should avoid the verb "USE", such as USE THE KEY TO UNLOCK THE
- DOOR. This command should be entered simply as UNLOCK THE DOOR WITH THE KEY.
-
- NOTE: Player's input commands will be shown in all caps throughout this
- document.
-
-
- STANDARD LEVEL VERBS
-
- Standard level games have a fixed set of verbs -- although these may all be
- supplemented by additional synonyms. Professional level games have all of the
- standard level verbs plus they can have additional verbs that are defined
- uniquely for each game. The standard level verbs and the form of their
- commands are shown below:
-
- Meanings of notation:
- [required word]
- {optional word}
- | (means OR, i.e., alternative words)
-
-
- 8
-
- Verbs that do not require nouns
- ===============================
- N,S,E,W,NE,NW,SE,SW,U,D,
- NORTH,SOUTH,EAST,WEST,NORTHEAST,NORTHWEST,SOUTHEAST,SOUTHWEST,UP,DOWN
- ENTER | GO [IN | INTO]
- EXIT | LEAVE (* directions *)
-
- SCORE (* display score and status *)
- QUIT | Q (* end game *)
- INVENTORY | I (* list things player is carrying and wearing *)
- SCREAM | SHOUT | YELL (* make noise but seldom accomplish anything *)
- WAIT (* waste a turn *)
- BRIEF | VERBOSE (* change description mode *)
- L | LOOK (* repeat full description *)
- SAVE | RESTORE {GAME} (* save and restore game status *)
- HELP | H (* ask for help *)
- SCRIPT (* Echo all output to both printer (LP1:) and screen *)
- UNSCRIPT (* Send all output to screen only *)
-
- Verbs that require nouns (and perhaps objects)
- ==============================================
- LIST | SHOW [EXITS] (* list visible exits *)
- THROW | CAST | DUMP [noun]
- {[AT | TO | IN | INTO | ACROSS | INSIDE] [noun]}
- ATTACK | KILL | FIGHT | HIT [creature] {[WITH] [noun]}
- DROP | PUT DOWN [noun | ALL]
- GET | TAKE | PICK UP [noun | ALL]
- OPEN [noun] {[WITH] [noun]}
- CLOSE | SHUT [noun]
- LOCK [noun] {[WITH] [noun]}
- UNLOCK [noun] {[WITH] [noun]}
- EXAMINE | CHECK | INSPECT | LOOK AT | LOOK IN [noun]
- (* synonym is "." or "EX" *)
- READ [noun]
- EAT [noun]
- DRINK [noun]
- PUT | PLACE [noun]
- [IN | WITH | INSIDE | INTO | NEAR | BEHIND | BESIDE |
- ON | UNDER] [noun]
- PUSH | TOUCH [noun] {[WITH] [noun]}
- TURN [noun] {ON | OFF}
- TURN {ON | OFF} [noun]
- PULL [noun]
- PLAY {WITH} [noun]
- LIGHT [noun]
- EXTINGUISH | PUT OUT [noun] (* synonym is "EXT" *)
- SHOOT | FIRE [noun] [AT] [creature]
- SHOOT | FIRE [creature] [WITH] [noun]
- PUT ON | WEAR [noun | ALL]
- TAKE OFF | REMOVE [noun | ALL]
- ASK [creature] [ABOUT] [noun]
- TALK [TO | WITH] [creature] {[ABOUT] [noun]}
- TELL [creature] [ABOUT] [noun]
-
-
-
-
-
-
- 9
-
-
- SOME GENERAL COMMENTS ABOUT COMMANDS
-
- Figuring out what words work in a game is part of the "challenge" of some
- adventure games. The usual directions are understood by AGT games (N, S, E,
- W, NE, NW, SE, SW, UP, and DOWN; in some cases, ENTER or EXIT might also be
- appropriate). Other events might also cause you to change location: if you
- detonate a nuclear warhead, for example, you'll likely be immediately
- transported somewhere far, far away.
-
- You can try to TAKE or GET most things that are in a room with you; you should
- EXAMINE or LOOK AT most visible nouns as well, whether or not you are carrying
- them. You can DROP or THROW anything you're carrying. Eating and drinking
- are often permitted, but eating strange things is usually dangerous. If
- something seems to be closed or locked, you can try to open or unlock it --
- but it may require some special kind of key.
-
- There's no penalty for incorrect words: if the game doesn't understand a word,
- it gives you another chance and doesn't count the invalid input as a turn.
-
- If you try to do something foolish like EAT CHAIR or GET THE BUILDING, the
- game will give you an appropriate response like "It is impossible to eat the
- chair" or "The building can not be taken".
-
-
- ABBREVIATIONS AND FUNCTION KEYS
-
- To look more closely at something, EXAMINE it. The period character ('.') is
- a synonym for EXAMINE, so typing ". BOOK" is the same as "EXAMINE BOOK". You
- can also abbreviate EXAMINE as EX (e.g., EX BOOK). The exclamation point
- ('!') is a synonym for ATTACK. To turn out a light, you can EXTINGUISH it,
- and EXTINGUISH can be abbreviated as EXT (e.g., EXT LAMP).
-
- It is also possible to use the function and cursor keys in lieu of many
- frequently used commands and directions as follows:
-
- F1 -- GET Up Arrow -- NORTH
- F2 -- DROP Down Arrow -- SOUTH
- F3 -- EXAMINE Right Arrow -- EAST
- F4 -- READ Left Arrow -- WEST
- F5 -- OPEN Home -- NORTHWEST
- F6 -- CLOSE End -- SOUTHWEST
- F7 -- INVENTORY Pg Up -- NORTHEAST
- F8 -- LOOK Pg Dn -- SOUTHEAST
- F9 -- SCORE Gray "-" Key -- UP
- F10 -- HELP Gray "+" Key -- DOWN
- Ins -- ENTER
- Del -- EXIT
-
- If at any time during the game the player needs to be reminded of what the
- function and cursor keys stand for, hitting the ? key followed by <ENTER> will
- produce a diagram of what each cursor and function key means.
-
-
- SPECIAL WORDS
-
- Certain words have special meanings to AGT games. SCORE will let you see how
- much progress you've made and will give you an idea how much of the game
-
- 10
-
- you've seen so far. QUIT will permit you to stop the game and return to DOS.
- SAVE will allow you to save the current game status, and RESTORE will restore
- a previously-saved game.
-
- In addition, AGT also allows the use of SCRIPT to echo all of the game's
- output to your printer (as well as the screen). UNSCRIPT may be used to turn
- off the printer output.
-
- As you move around through the game, you'll notice that the game provides a
- long text description of each room only when you first enter the room. To see
- the full description again, type LOOK or L or hit the F8 function key. The
- game doesn't keep these long text descriptions in memory, but instead reads
- them from disk each time it needs them. If you don't like this delay, you can
- suppress the long text by using the BRIEF command. VERBOSE will bring them
- back.
-
- Further, in AGT it is possible to issue commands for HELP or alternatively hit
- the F10 key. Be warned, however, that some game designer might feel that the
- situation does not deserve any help or, worse yet, some deviate designer might
- actually give the player a hint that is a little misleading.
-
-
- NOUNS
-
- While the list of verbs is generally similar from game to game, all the nouns
- change every time. One game might be filled with weapons and creatures, while
- another might contain many keys and locks. Most nouns are unique: you
- probably won't find more than one "gold key," but you might find a "brass
- key," an "access card," and an "entry pass." The game only understands an
- adjective if it is correctly followed by the matching noun: if TAKE RED FLUTE
- is valid, the game will not try to guess what you meant by TAKE RED or TAKE
- RED INSTRUMENT or TAKE THE RED ONE. It will accept TAKE FLUTE, but not TAKE
- BLUE FLUTE.
-
- With some verbs, nouns are optional. For example, NORTH is quite clear by
- itself, and any "valid" words following it will be ignored completely. EAT
- needs a noun of some kind, preferably an edible one. And some things may not
- be possible unless you specify a tool: UNLOCK PADLOCK may not be acceptable,
- while UNLOCK THE PADLOCK WITH THE BRASS KEY may work fine.
-
-
- NOISE WORDS
-
- The words "THE", "MY", "ITS", "A" and "AN" are ignored; so are friendly words
- like "PLEASE" and "NOW." This way, PLEASE PUT A RED ROSE AND MY NOTE ON THE
- SMALL TABLE NOW can be understood, while the game may be quite confused by
- PLEASE YOUR MOTHER.
-
-
- PREPOSITIONAL PHRASES
-
- In some cases, the preposition need not be followed by an object (TURN THE GAS
- STOVE ON is fine), but often the game will be puzzled unless you provide one.
- For example, UNLOCK THE PADLOCK WITH or PLACE THE BOOK BESIDE just won't do.
-
-
- COMMAND LINE OPTIONS
-
-
- 11
-
- In order to accommodate as many hardware systems as possible, it is possible
- to enter a "/B" option on the command line that invokes your adventure game.
- This causes the game to use the BIOS for all output, rather than writing
- directly to the screen memory locations (which is considerably faster and
- AGT's default mode of operation). Some clones may require this option. Also,
- some multi-tasking environments (specifically, DesqView) need this option to
- allow an AGT game to run in its own "window". If you find that an AGT game
- causes strange behavior on your screen, you should try this option. For
- example, to play the game QUEST using this option, you would start the game
- from the DOS prompt with "RUN QUEST /B".
-
- There is one additional command line option available. If you wish the
- player's input to be in lower case, rather than AGT's default mode of upper
- case, use the option "/L". For example, to play CAVE with lower case player
- input, start the game from the DOS prompt with "RUN CAVE /L".
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 12
-
- PART 2: HOW TO WRITE AN ADVENTURE GAME
-
-
- INTRODUCTION: WHY SHOULD I WRITE MY OWN ADVENTURE GAME?
-
- Here are a few good reasons:
-
- - Imagine your office as an adventure game. Imagine the wonderful
- descriptions you could provide for your co-workers' offices, the analogies you
- could make for the delivery people, and the thinly-veiled insults of your boss
- you could include. If such an adventure game scenario were written in
- reasonable taste, it could serve as a well-deserved diversion on a Friday
- afternoon. Of course, if it's written in poor taste, and your insults aren't
- veiled enough, it could be your last Friday.
-
- - Maybe you are trying to teach someone something. Perhaps you want them to
- learn about computers. Maybe you want to guide them through many screens of
- tutorials. If you could write the text as an adventure game, and make
- learning a game, the game players might learn faster and even have fun doing
- it. An excellent example of this is a series of spreadsheet templates called
- Templates of Doom which has introduced Lotus 1-2-3 (in the guise of an
- adventure game) to thousands of new spreadsheet users. Another excellent
- example is a game entitled Brainscape which teaches the anatomy of the human
- brain by letting the player (who has been reduced to microscopic size) explore
- the various "locations" of the brain in search of human growth hormone and
- other "treasures" -- so the he can be restored to normal size.
-
- - Or maybe you're well-equipped with a great imagination and you want to
- develop a game that will rival the ones you've bought in stores or played with
- friends. Perhaps this is your chance to prove your fiction-writing abilities.
-
- - Or last, but not least, because writing adventures is even more fun than
- playing them.
-
-
- HOW AN AGT ADVENTURE GAME WORKS
-
-
- AN OVERVIEW
-
- When a player begins to play an AGT game, the first thing the program does is
- look on the disk for a title file (indicated by a .TTL file extension), which
- should contain the name of the game, the author's name, and perhaps a
- copyright statement. Each line in the file is displayed centered on the
- screen.
-
- AGT also posts its copyright notice just below the game writer's title
- information. If, for some reason, there is no file with a .TTL extension, the
- AGT copyright information is displayed by itself. The title screen, with the
- author's information and AGT's, stays on the screen while the program
- initializes all its data arrays and records and reads the various compiled
- data file.
-
- If the game's .DAT file contains some text preceded by the keywords INTRO or
- INTRODUCTION and ended with the keyword END_INTRO, that text is displayed at
- the beginning of the game. It cannot be re-read during the game.
-
- In addition to the INTRO section of the .DAT file, there can also be an
-
- 13
-
- instruction file with a .INS extension. If such a file exists for the
- adventure being played, before actual play begins AGT will ask the player if
- he/she would like instructions. If the answer if yes, this file will be
- displayed.
-
- Once all the data has been read and the player has had an opportunity to read
- the game's instructions (if any), the program puts the player into room 2 of
- the game (or another room if the author has specified an alternative starting
- location). There is no room 1; a location of 1 indicates the player's
- pockets. AGT then prints the long text description for room 2, (or the
- alternative starting location) and the player is asked what to do.
-
- Each time the player types in a command and <ENTER>, the program sends the
- input line to the "parse" module. The parser take the input line, breaks it
- into separate words, and tries to locate an addressee (if the command is being
- directed to another character), a verb, a noun, a preposition, and another
- noun as the object of the preposition. It does this by eliminating extra
- words like "THE" and "PLEASE"; and by checking and then eliminating
- adjectives. It returns up to five words: addressee, verb, noun, preposition,
- and an object of the preposition. (If any of these elements is missing, the
- "empty string" ('') is returned in its place.)
-
- If an invalid word is found by the parser, it informs the user, indicating
- what part of speech AGT expected and which specific input command word it
- didn't recognize. Otherwise, the program then calls the execute module; this
- section selects a procedure to call based on the verb (THROW, TAKE, EAT, MOVE,
- etc.). Depending on the procedure's own checking, the noun, preposition and
- object might be rejected as invalid or, in some cases, ignored partly or
- completely and an appropriate "error" message will be given For example, "EAT
- CASTLE" would typically cause the "error" message: "It is impossible to eat
- the castle."
-
- There are two ways a player can be moved to a new room. One is by
- specifically trying to do so. Moving east is generally accomplished by typing
- EAST or E or hitting the Right Arrow cursor key. If the player tries to move
- in a direction that is not allowed, AGT will inform him that such a move is
- impossible.
-
- The other way to move is by meeting a set of special requirements that the
- game's author has defined as a "special." The special might be defined, in
- plain language, as "if the player is in the sauna, and he turns the faucet,
- then move him to another room X." That other room X might be anything. One
- possibility is that it may be a room with a similar or identical description,
- but with a new exit or without an old one. It might even be the same room,
- but by executing the "special," the program displays several lines of text.
-
- In this case, the special text might be "You turn on the faucet, and scalding
- hot water pours onto your feet. You scream in agony and kick the faucet,
- which is turned off." If the author was cruel, the "special" here might move
- the player to a new room called "hell" and be told "As you turn the faucet,
- scalding hot water pours out onto your legs. You scream in agony, but the
- faucet won't shut off. In minutes, you are scalded to death. You awaken in
- purgatory, where Satan tells you that your punishment for killing the lizard
- [something the player did earlier to get here] will be boiling in oil for
- eternity." The new room description would describe a vat of boiling oil,
- provide no exits, and include the keyword GAME_END to end the game.
-
- For relatively simple adventure games (i.e., Standard Level games), "Specials"
-
- 14
-
- are the way you do almost anything unusual. Of course, a special can be used
- to move a player to a new room (i.e., TOUCH MIRROR might cause the player to
- fall through the looking-glass and into a new room). But specials also allow
- a room to be "changed" in the player's view -- this is accomplished by
- actually moving the player to a new, but similar room. If you want an airlock
- to close one door and open another, you use a "special" which moves the player
- to a 'new' airlock with a different exit. If you want a player to 'teleport,'
- you use a special. If you want to player to be surprised by some action but
- not moved (i.e., PLAY STEREO could lead to "Beethoven's Fifth plays loudly,
- awakening the neighbors. Someone pounds loudly on the ceiling"), use a
- special. More examples of "Specials" will be given later.
-
-
- STANDARD LEVEL GAME FILES
-
- Each Standard Level games can have up to three files: A title file (e.g.,
- ALICE.TTL), an instruction file (e.g., ALICE.INS), and a data file
- (ALICE.DAT). Each of these file types will be explained in separate sections
- to follow.
-
-
- TITLE FILES
-
- If there is a file with a .TTL extension, that file is displayed first before
- the actual game play begins. The contents of this file will be displayed
- centered on a cleared screen. For example, the title file for the ALICE IN
- WONDERLAND game contained in the ALICE.TTL file is:
-
- The Adventures of Alice
- Who
- Went Through the Looking-Glass
- And
- Came Back
- Though Not Much Changed
- Based on characters created by Lewis Carroll
- Game and Text Copyright 1986 D.A. Asherman
-
- This would actually be centered on the screen as follows:
-
- The Adventures of Alice
- Who
- Went Through the Looking-Glass
- And
- Came Back
- Though Not Much Changed
- Based on characters created by Lewis Carroll
- Game and Text Copyright 1986 D.A. Asherman
-
-
- SETTING SCREEN COLORS
-
- AGT sets the screen colors to be used during the adventure automatically. If
- the game is being played on a color monitor, the screen output is quite
- colorful. Specifically, the default screen colors will be:
-
- Normal text color is Cyan
- High lighted text color is Yellow
- Background color is Black
-
- 15
-
- Reverse text color is Red
- Reverse background color is Light Gray
-
- These colors cause the normal screen output to be shown as "Cyan on Black",
- while the player's input is shown as "Yellow on Black", and the status line at
- the top of the screen is shown as "Red on Light Gray".
-
- These default colors can be changed to specific different colors in the first
- line of the .TTL file. For example, if you wanted to change the color
- combinations to normal output of "White on Blue", and player input of "Yellow
- on Blue", and the status line of "Black on Cyan", then you are specifying:
-
- Normal text color is White
- High lighted text color is Yellow
- Background color is Blue
- Reverse text color is Black
- Reverse background color is Cyan
-
- This could be accomplished by putting the following line as the first line of
- the .TTL file:
-
- COLORS WHITE YELLOW BLUE BLACK CYAN
-
- If you are playing the game on a monochrome monitor, most of the screen output
- will be "White on Black", i.e., the normal monochrome output for your monitor.
- The only exceptions will be the player input which will be shown high-lighted
- and the status line on the top of the screen which will be shown in reverse,
- i.e., "Black on White". On monochrome monitors, this basic monochrome color
- combination will be used automatically regardless of what may have been
- specified in the COLORS command in the first line of the .TTL file.
-
- It is also possible for the player to change the screen color combination by
- giving input during the game. For example, if the player inputs:
-
- COLORS YELLOW GREEN CYAN BLACK LIGHTGRAY
-
- during the game, the screen will immediately change to "Yellow on Cyan", with
- the player's input shown as "Green on Cyan", and the status line displayed as
- "Black on Light Gray" -- if the game is being played on a color monitor. If
- the game is being played on a monochrome monitor, the above player input would
- have no effect. Other player color commands allowed are:
-
- COLORS MONO
-
- which changes the screen to a monochrome color combination - even on a color
- monitor, and:
-
- COLORS DEFAULT
-
- which will return the screen to AGT's default color combination -- depending
- upon the type of monitor the game is currently being played upon.
-
-
- INSTRUCTIONS FILES
-
- If there is a file with the correct filename and the suffix .INS, then AGT
- will ask the player if he wished to read the instructions for the game. If
- the response is Y or YES, the filename.INS file will be displayed a screen at
-
- 16
-
- a time with a pause between screens. If the player responds with N or NO,
- then the instructions will be skipped and the game will begin normally in the
- starting room location.
-
- If there is no .INS file, then the instruction prompt will not appear and play
- will begin without any instructions.
-
-
- THE WORK-HORSE .DAT FILE
-
- Adventure games are really just a special kind of data base application. The
- game driver (for AGT, this is RUN.EXE) just accesses the adventure data base
- to retrieve data based on the player's commands. This is much like how a
- "standard" data base application might display all employees in the marketing
- department with salaries over a certain amount after getting a query from the
- data base user. For Standard Level AGT games, the data base is contained in
- the .DAT file. This file is the real work-horse file for AGT adventure games.
- The most important data elements in an AGT game are three large data arrays:
- the game's rooms, nouns, and creatures. Each of these data types will be
- explained in separate sections that follow.
-
-
- ROOMS
-
- The room specification in the .DAT data file is quite simple:
-
- Required:
-
- |<-----significant----->|<------ignored------------------------>|
- |
-
- ROOM nnn <-- nnn is a number from 2 to 199
- Room Name <-- short room name (up to 30 characters),
- that will be shown on the status
- line (do not include comments!)
- {optional characteristics}
- END_ROOM
-
- Optional characteristics: <-- optional but at least one is
- strongly recommended
-
- |<---significant--->|<------ignored------------------------>|
- |
-
- {direction} nnn <-- nnn is a number from 2 to 199
- (default is 0)
- {any one of 12 directions can be
- specified, from the list:
- NORTH NORTHEAST UP
- SOUTH SOUTHEAST DOWN
- EAST NORTHWEST ENTER
- WEST SOUTHWEST EXIT}
- SPECIAL nnn <-- optional, nnn is a room number.{If
- present, the current definition
- must include KEY xxx and there must
- be a SPECIAL nnn definition}
- KEY xxx <-- xxx is a noun number (200-299)
- {activates special nnn}
-
- 17
-
- LIGHT xxx <-- xxx is a noun number (200-299)
- OR the value 1 ("any light")
- {default is 0}
- POINTS xxx <-- xxx is number of points player is
- awarded just for getting here.
- Default is 0.
- LOCKED_DOOR <-- default is FALSE. If TRUE, AGT
- will act as if there is a locked
- door that cannot be opened in
- the room and give various
- appropriate messages if player
- tries to do something to the
- door.
- GAME_END <-- if this line is in the definition,
- the game ends as soon as the player
- enters the room (the room_descr
- is displayed, then the score).
- (Player loses game here.)
- GAME_WIN <-- if this line is in the definition,
- the game ends as soon as the player
- enters the room (the room_descr
- is displayed, then the score).
- (Player wins game here.)
- ROOM_SYNONYMS <-- default is NONE. Room synonyms are
- indicated in the .DAT file as:
- ROOM_SYNONYMS MAGIC_WORD XYZZY SESAME
- ROOM_SYNONYMS CHANGE_LOCATIONS CLIMB
- ROOM_SYNONYMS PLAY SHOW DISPLAY FLASH
- These cause the first word (which must
- be a valid verb) to be substituted
- whenever the player enters one of the
- words following the first word in that
- room. For example, if the player
- entered SHOW, DISPLAY, or FLASH (above),
- AGT would act as if the word PLAY (which
- is a "special") was entered and react
- accordingly. There can only be one room
- synonym specification in each room.
-
- It is recommended that at a minimum, one exit from each room be provided;
- otherwise the player will be stuck in the room until he quits. Of course,
- that direction might be a special -- which will be explained in a later
- section.
-
- A room description should also be provided in .DAT file:
-
- ROOM_DESCR <nn>
- Some text, any number of lines, about the room.
- END_ROOM_DESCR
-
- This room description will be what is printed whenever the player enters the
- room or gives the command to LOOK.
-
-
- HELP MESSAGES
-
- An optional HELP message may also be provided for each room:
-
-
- 18
-
- HELP <nn>
- Some text, any number of lines, gives a HELP message for this room.
- END_HELP_DESCR
-
- If you don't enter a specific HELP message for a room, the default message if
- the player asks for HELP is "Sorry, but you are on your own here."
-
- Here is a more complete example of how a room might be specified in the .DAT
- file:
-
- ROOM 32
- Top of Cliff
- NORTH 33
- SOUTH 34
- WEST 35
- END_ROOM
-
- ROOM_DESCR 32
- You are standing near the edge on the top of a tall cliff. To the east is
- a sheer drop of several thousand feet. To the north, west and south are
- paths that lead down the side of the mountain.
- END_ROOM_DESCR
-
- HELP 32
- Be careful, don't go too near the edge!
- END_HELP_DESCR
-
-
- NOUNS
-
- Nouns are necessarily more complex than rooms. They are specified in the
- following format, listed with the possible values (and defaults):
-
- |<-----significant----->|<------ignored------------------------>|
- |
-
- NOUN nnn <-- nn is a number from 200 to 299
- Name <-- one-word name of the noun
- Adjective <-- one-word adjective
- Short one-line description of the noun
-
- {other characteristics go here}-
- END_NOUN
-
- Other characteristics (optional):
-
- SIZE nn <-- nn is a number from 1 to 99+
- Default is 1.
- WEIGHT nn <-- nn is a number from 1 to 99+
- Default is 1.
- UNMOVABLE <-- default is movable (carryable)
- LOCATION nn <-- nn is a "room" number (1-299, 1000)
- 1 - if being carried
- 2-199 - in room 2, etc.
- 200-299 - inside another noun
- 1000 - if being worn
-
-
-
- 19
-
- READABLE <-- default is "not readable"
- {if READABLE then <TEXT nn>
- must also be defined}
- CLOSABLE <-- default is "not closable"
- CLOSED <-- default is "open"
- {if open then it can hold
- something}
- LOCKABLE <-- default is not lockable
- LOCKED <-- default is unlocked
- KEY nn <-- default is 0
- {noun nn unlocks this noun
- if it's lockable}
- EDIBLE <-- default is inedible
- DRINKABLE <-- default is undrinkable/solid
- POISONOUS <-- default is nonpoisonous
- {predictable effect if poisonous
- edible/drinkable noun is eaten}
- ON <-- default is 'off'
- PUSHABLE <-- default is not pushable
- {PUSH_DESCR nn recommended but
- not required if it is pushable}
- PULLABLE <-- (ditto, PULL_DESCR nn)
- PLAYABLE <-- (ditto, PLAY_DESCR nn)
- TURNABLE <-- (ditto, TURN_DESCR nn)
- IS_LIGHT <-- default is NOT is_light
- (IS_LIGHT -> illuminates any room
- defined as LIGHT 1 or LIGHT nnn
- where nnn is the noun number)
- POINTS <-- default is 0 (points awarded to player
- if object is being carried, present or
- in the "treasure" room at game_end)
- GAME_WIN <-- default is FALSE. Player wins game
- if TRUE when he get this noun.
- CAN_SHOOT <-- default is can't shoot (can the
- weapon be used to shoot a
- creature? if not, it must be
- thrown)
- NUM_SHOTS <-- default is 0 (how many bullets/
- charges are there initially?
- decremented each time the noun is
- fired.)
- WEARABLE <-- default is not wearable
- POSITION <-- default in NONE. If the game designer
- wishes to have a noun's original
- position as "(behind the tree)"
- he would have:
- POSITION behind the tree
- in the .DAT file. The verbs
- PUT/PLACE and GET/TAKE change the
- noun's position.
- SINGULAR <-- default is SINGULAR. The only
- alternative is PLURAL. AGT
- verbs/pronouns will be singular
- or plural depending upon this
- value.
-
-
-
-
- 20
-
- NOUN_SYNONYMS <-- default is NONE. If the .DAT file had
- NOUN_SYNONYMS GOLD COIN COINS
- then all of these words would be
- accepted as valid synonyms for
- this noun. Of course, the
- "official" NAME will also work.
-
- Note: To 'spice' up the game, you might want to put things inside other things
- initially, so the player has to open everything to be sure s/he doesn't miss
- anything important. Be logical, though: a refrigerator seems likely to be
- open-able, but a crabapple probably ought to be 'closed' and 'unclosable' and
- thus unable to contain something else.
-
- Similar to the complete room descriptions, there is a way to specify a lengthy
- description of a noun by using a NOUN_DESCR in the .DAT file. When the player
- gives the command to EXAMINE the noun, this description will be displayed on
- the screen.
-
-
- TEXT
-
- If a noun is readable, the description that is printed whenever the player
- gives the command to READ it is contained in a TEXT description in the .DAT
- file. Thus, the following would be a valid set of definitions:
-
- NOUN 232
- Book
- Red
- There is a small red book here.
- WEIGHT 1
- SIZE 3
- LOCATION 32
- READABLE
- NOUN_SYNONYMS Cover Title
- END_NOUN
-
- NOUN_DESCR 232
- The red book is quite thin, and has a hard cover. There is writing on the
- book's cover.
- END_NOUN_DESCR
-
- TEXT 232
- The title of the book is "The Wisdom of Ronald Reagan." The pages are all
- blank.
- END_TEXT
-
-
- MULTIPLE NOUNS WITH THE SAME NAME
-
- AGT allows multiple nouns with the same name. The parser examines the current
- room and player environment and assumes that if only one noun with a
- particular name is in the room then that must be the noun that the player
- meant as the NOUN or OBJECT of his command. If there is more than one noun
- with the same name in the room, the parser gives an "error" message and asks
- the player to be more specific about which NOUN (or OBJECT) he means. For
- example, if there are three kinds of trees in the "room" and the player had
- entered the command to EXAMINE TREES, the parser would ask for the
- clarification: "Which 'TREES', the OLIVE TREES or the OAK TREES or the PINE
-
- 21
-
- TREES?" The player could then enter any response with one of the proper
- adjectives to specify which trees were meant, i.e., any of these responses
- would tell the parser that the OAK trees were correct:
-
- THE OAK TREES
- EXAMINE THE OAKS
- OAK
- THE OAKS, YOU OAF!!
-
- If the player still doesn't enter a response with one of the proper
- adjectives, a message is given that asks the player to re-enter his command
- using the NOUN's adjective to clarify which NOUN is meant. This means that if
- there are two or more nouns with the same name, their adjectives must be
- unique, i.e., you can have a RED BOWL and a GREEN BOWL, but the game should
- not contain two RED BOWLs (at least it should not have two of them if they can
- be together in the same room.)
-
-
- PUSH, PULL, TURN, AND PLAY DESCRIPTIONS
-
- Similar to TEXT descriptions if a noun is readable, you may also give unique
- descriptions if a noun is described as being pushable, playable, turnable, or
- pullable and the player takes one of those actions with the noun. These
- descriptions are included in the .DAT file as a PUSH_DESCR, PULL_DESCR,
- TURN_DESCR and PLAY_DESCR. They will be displayed only if the player takes
- the specified action AND that action does not activate a SPECIAL for the
- current room. If there is no description provided, a standard ("nothing
- happens" or something equally appropriate) message is provided.
-
- For example, if you want to generate messages whenever the player gives the
- commands to PLAY RADIO or to TURN ON RADIO or TURN DIAL, you could set up the
- following in the .DAT file:
-
- NOUN 218
- Radio
- Portable
- There is a large "ghetto blaster" portable radio here.
- MOVABLE
- WEIGHT 10
- SIZE 10
- NOUN_SYNONYMS GHETTO BLASTER DIAL DIALS KNOB KNOBS
- PLAYABLE
- TURNABLE
- END_NOUN
-
- NOUN_DESCR 218
- The radio is barely portable. It weighs about 47 pounds and must be
- carried with both hands. It has many dials and knobs.
- END_NOUN_DESCR
-
- PLAY_DESCR 218
- As you turn on the radio, you hear a song by "Duran Duran." After a few
- moments, you become bored with the music and you turn the radio off.
- END_PLAY_DESCR
-
-
-
-
-
- 22
-
- TURN_DESCR 218
- As you turn the dial on the radio, you hear the Beatles singing
- "Yesterday". This sounds like a good station and you stop turning the
- dial. The music sounds nice and you sing along softly.
- END_TURN_DESCR
-
-
- EATING, DRINKING, AND DYING
-
- Any object defined as EDIBLE can be eaten. Any object defined as DRINKABLE
- can be drunk. And any object defined as POISONOUS will kill the player if
- s/he eats or drinks it. POISONOUS has no effect if the noun is neither edible
- nor drinkable. In most situations, it is considered poor sport to make
- completely non-threatening and logically edible things poisonous; it is
- likewise questionable to make packages of rat poison edible but non-poisonous.
-
- When a noun is eaten or drunk it normally disappears (into the player's
- stomach -- naturally). The only exception to this is when the noun is
- unmovable. This makes it possible for the player to drink from a lake without
- having all the water (or the lake itself) disappear.
-
-
- WEIGHT AND SIZE
-
- Those values are there for a reason. No player can lift an object heavier
- than 100, even if it's defined as MOVABLE. Likewise, objects whose size is
- more than 100 are too awkward to be carried. The total weight the player can
- carry is 100, so the player cannot carry two 60-weight objects at once. Total
- size limit is also 100. It is considered poor sport to assign large weight
- values to feathers and low values to large slabs of steel, but cruel game
- writers are able to do so. Likewise, a game will be less baffling if small
- objects (pens, tin cans) have small size values and large ones (desks, cars)
- are larger.
-
- (Remember, of course, that if your scenario puts the player in the role of
- King Kong or Godzilla, you'd want to scale everything down so s/he might be
- able to easily carry six cars and a bus but have difficulty with more than one
- fully-loaded semi or house.)
-
-
- LIGHT AND DARKNESS
-
- If a room has a LIGHT value other than 0 (the default), the room will appear
- pitch black if the player wanders in empty-handed. There are two "types" of
- lights and two types of darkness. A noun may be defined as being a light by
- specifying the word IS_LIGHT in its definition; in this case, it will light
- any dark room defined as LIGHT 1. The light value of 1 in a room definition
- means that any light will make the room visible. Of course, these
- "general-purpose" lights must be turned on to light the room, and thus all
- LIGHTs can be TURNed ON and OFF (or LIGHTed and EXTINGUISHed.). (EXT is an
- acceptable abbreviation for EXTINGUISH; EX is the abbreviation for EXAMINE.)
- If the LIGHT value is other than 1 (i.e., LIGHT 218), only the noun with the
- matching number will make the room's contents visible. This is useful if the
- darkness comes from something other than an absence of light: for example, a
- fan might be the only object that makes a smokey room clear enough to see in.
- A special-purpose light need not be defined as a light (i.e., it doesn't have
- to be defined IS_LIGHT), nor does it have to be on, to work as a light in a
- room with that noun as a LIGHT. A noun can function as a special-purpose
-
- 23
-
- light for more than one room, but each room can only be lit by one
- special-purpose light. (A room with a LIGHT value of 1 will be lit by ANY
- noun defined as IS_LIGHT.)
-
-
- CREATURES
-
- Any living thing is identified as a 'creature', and can be either 'friendly'
- or 'hostile'. Friendly creatures are quite passive; hostile creatures are not
- quite as friendly. It is recommended that provisions be made for a weapon to
- kill any hostile creatures. For fairness, that weapon should be accessible by
- the player before s/he meets the hostile creature.
-
- Players should be discouraged from wild and unwarranted killing: i.e., they
- ought not kill friendly creatures. If no weapon will kill the creature (i.e.,
- if you leave or specify WEAPON as the default value 0), the player cannot kill
- it. For friendly creatures, you should not lead the player on by making the
- weapon something unexpected: if the player kindly offers a jelly bean to the
- friendly creature, it ought not be fatal. Only one weapon can kill any given
- creature, but the same weapon might be used to kill many creatures.
-
- The format in the .DAT file for Creatures, like rooms, are relatively simple:
-
- |<-----significant----->|<------ignored------------------------>|
- |
- Required:
-
- CREATURE nnn <-- nnn is a number from 300 to 399
- Name <-- one word name
- Adjective <-- one word adjective
- Short one-line description of creature.
- {optional characteristics}
- END_CREATURE
-
- Optional:
-
- LOCATION nn <-- nn is a room number from 1 to 199.
- {default is 0}
- WEAPON nn <-- nn is a noun number from 200 to 299
- {default is 0}
- {noun nnn kills this creature}
- HOSTILE <-- default is friendly
- THRESHOLD n <-- {n is number of times a hostile creature
- can be unsuccessfully attacked before it
- kills the player - default 3}
- TIME_THRESH n <-- {n is number of turns player can be
- in the same room with the creature
- before it kills the player - default
- value is infinite, or disabled}
- POINTS nn <-- nn is the number of points player
- gets for having this creature in the
- current room, i.e., for "capturing"
- or "rescuing" the creature.
- {default is 0}
-
-
-
-
-
- 24
-
- GROUPMEMBER <-- default is NOT a GroupMember. If a
- creature is specified as a GROUPMEMBER
- then it will automatically follow the
- player from location to location once
- they meet.
- GENDER <-- default is THING. GENDER may also be
- specified as MAN or WOMAN. GENDER
- causes pronouns and verbs to be used
- that are appropriate to the specific
- creature. THINGs are ferocious and
- referred to as "IT". MANs are less
- ferocious and are referred to as
- "HE" and "HIM". WOMANs are "SHE"
- and "HER".
- CREATURE_SYNONYMS <-- default is NONE. If the .DAT file had
- CREATURE_SYNONYMS BOB BILLY then all
- of these names would be accepted as
- valid synonyms for the creature.
- Of course, the "official" NAME will
- also work.
-
-
- NOTE: A player cannot exit a room containing a hostile creature. When killed,
- creatures are relocated to LOCATION 0. Friendly/non-hostile creatures have no
- effect on the (Standard Level) game's outcome -- they just add a little
- "spice" to the game.
-
- For example, to define a female Froobious Bandersnatch in room 9, which can be
- killed with noun 205, we could use the following specifications in the .DAT
- file:
-
- CREATURE 301
- BANDERSNATCH
- FROOBIOUS
- There is a mommy froobious bandersnatch, looking for her cubs.
- LOCATION 9
- WEAPON 205
- THRESHOLD 2
- TIME_THRESH 5
- WOMAN
- HOSTILE
- CREATURE_SYNONYMS BEAST
- END_CREATURE
-
- The thresholds specify that you can try to attack the bandersnatch twice
- (unsuccessfully) or be in the room with the bandersnatch for 5 turns, before
- the beast kills you. The player will not be able to leave the room if the
- Bandersnatch is present, because she is hostile, until the creature has been
- killed (with weapon 205). To use the weapon to kill the creature, the player
- would FIRE THE GUN AT THE BANDERSNATCH or SHOOT THE BEAST WITH THE GUN, if the
- weapon is a gun, or THROW the weapon AT the creature or KILL the creature WITH
- the weapon, if the weapon is not a gun.
-
- The complete EXAMINE description might be contained in the .DAT file as:
-
-
-
-
-
- 25
-
- CREATURE_DESCR 301
- The bandersnatch is snorting and drooling. It is a large female and she
- appears to have misplaced her cubs, which makes her very unpleasant and
- very dangerous. She seems to harbor few honorable intentions towards
- you.
- END_CREATURE_DESCR
-
-
- GROUPS OF CREATURES
-
- Creatures can be designated as a member of the "Group" by using the
- GROUPMEMBER specification. All group members in the current location will
- automatically move with the player when he/she moves to another location.
- However, their group status will not effect other aspects of their behavior
- during the game, i.e., they can still be talked to or killed as individuals.
- Probably the best known example of an adventure creature following the player
- once they meet is the Robot Floyd who is the player's constant companion in
- the Infocom adventure games Planetfall and its sequel Stationfall. The group
- can have several members, so this feature could be used to beam down a
- "landing party" consisting of the player, Spock, Sulu, McCoy and Scotty and
- have them explore the planet as a group in a Star Trek adventure.
-
- Part 3 of this manual introduces a variety of meta-commands that enable the
- game designer to test the status of the group and to manipulate the group in
- many ways, i.e., add or subtract members, disband the group, send the group
- off to another location, etc.
-
-
- SPECIALS
-
- To 'activate' the special, the player must 'do something' to the noun
- specified as the room's KEY. This can include turning it, pushing it, pulling
- it, or playing it (depending on what can be done to the noun as defined). If
- the proper action is taken on the noun while in the room, the player will be
- relocated to the room specified in the SPECIAL line and the SPECIAL nn text
- will be displayed. (If the Special points to the current room, the only
- effect apparent to the reader will be the display of the SPECIAL text.)
-
- For example, to enter the house (by going to the entry hall -- ROOM 14) by
- pushing the door bell on the porch (ROOM 13) could be done with the following
- special:
-
- ROOM 13
- Front Porch .
- .
- .
- SPECIAL 14 (* Entry Hall *)
- KEY 222 (* Door Bell *)
- END_ROOM
-
- ROOM_DESCR 13
- You are standing on the front porch of a large mansion. The doors are
- about 10 feet high.
- END_ROOM_DESCR
-
-
-
-
-
- 26
-
- NOUN 222
- Bell
- Door
- Beside the door in a door bell.
- .
- .
- PUSHABLE
- UNMOVABLE
- LOCATION 13 (* Front Porch *)
- NOUN_SYNONYMS doorbell
- END_NOUN
-
- SPECIAL 14
- You boldly push the door bell. Deep inside the house, you hear some
- chimes that sound vaguely like Big Ben. After a few minutes, the door is
- opened by a butler dressed in a black morning coat. He says "Good
- morning, Sir. I will tell the Master that you have arrived." With that,
- he disappears down the hall. You are left alone in the entry hall of the
- house.
- END_SPECIAL
-
- ROOM 14
- Entry Hall .
- NORTH 15
- .
- .
- END_ROOM
-
- ROOM_DESCR 14
- The entry hall is long and narrow. You can see open doors at the end
- of the hall to the north. The front doors are behind you to the south.
- END_ROOM_DESCR
-
-
- "SPECIAL" SPECIALS
-
- AGT has two "special" specials: the verbs MAGIC_WORD and CHANGE_LOCATION.
- These words are used in conjunction with a room synonym declaration to create
- a "special" for any words the game designer may wish to use (i.e., you are not
- restricted to PULL, PUSH, TURN and PLAY). For example, the designer may
- specify that XYZZY and MAGIC_WORD are synonyms in a particular room -- so that
- if the player gives the command XYZZY in that room, it causes a "special" for
- that room which might send the player to another room with an appropriate
- "special" messages being written. CHANGE_LOCATION works the same way except
- it requires a specific NOUN that is the "key" to the "special" to be present
- in the room. For example, the game designer might make SHOW a synonym for
- CHANGE_LOCATION in particular room and make the noun PASS the "key" to the
- "special" in that room, then whenever the player gives the command SHOW THE
- PASS TO THE GUARD (in the particular room), the "special" would be executed
- and a message like "The guard examines your security pass and finds it in
- order. He opens the steel door and allows you to enter the vault, where you
- find...."
-
- NOTE: In AGT, each room may have only one special. So, you will not be able
- to have a Magic_Word and another special in the same room.
-
- For example, in order to be able to define a special for CLIMB TREE or SCALE
- TREE to cause the player to go from room 10 to room 15 with a special message,
-
- 27
-
- the game designer could use the following specifications in his data file:
-
- ROOM 10
- Dark Forest
- .
- .
- SPECIAL 15 (* Top of Tree *)
- KEY 221 (* Oak Tree *)
- ROOM_SYNONYMS CHANGE_LOCATION CLIMB SCALE
- END_ROOM
-
- NOUN 221
- tree
- oak
- There is a large oak tree at the edge of the clearing.
- .
- .
- UNMOVABLE
- LOCATION 10 (* in Dark Forest *)
- END_NOUN
-
- SPECIAL 15
- You manage to climb up to the top of the oak tree.
- END_SPECIAL
-
- ROOM 15
- Top of Oak Tree
- .
- .
- DOWN 10 (* going DOWN puts you back in the dark forest *)
- END_ROOM
-
-
- MAGIC_WORD works the same way except, the KEY for the room MUST be zero. For
- example, if you wish to allow the player to go from room 23 to room 44 when he
- gives the commands SESAME, SHAZAM or ABRACADABRA you would do it as follows:
-
- ROOM 23
- Emperor's Tomb
- .
- .
- SPECIAL 44
- KEY 0
- ROOM_SYNONYMS MAGIC_WORD SESAME SHAZAM ABRACADABRA
- END_ROOM
-
- SPECIAL 44
- By saying the magic word $VERB$, you are suddenly transported
- to the outside of the Emperor's Tomb. You are very lucky to
- have escaped, because the air in the tomb was almost gone.
- END_SPECIAL
-
- ROOM 44
- Outside Tomb Entrance
- .
- .
- END_ROOM
-
-
- 28
-
- In this example, the SPECIAL message uses a very convenient and helpful
- feature of AGT, namely $VERB$. This causes the original verb to be repeated
- back in the message, i.e., if the command was SHAZAM, then the special message
- would be "By saying the magic word shazam, you are suddenly transported..."
- Similarly, in AGT, the game designer may also have the NOUN, the noun's
- ADJECTIVE, the PREPOSITION and the OBJECT of the commands repeated back in
- messages by specifying $NOUN$, $ADJECTIVE$, $PREPOSITION$ and $OBJECT$ within
- the message text. If a command is being addressed to a character in the
- adventure, e.g., SCOTTY, BEAM ME UP, the character's name may also be echoed
- back in a message by using $NAME$.
-
-
- CREATING A TYPICAL ROOM
-
- Let's suppose that your game contains a bedroom, connected to a closet, a
- bathroom, and a hallway. In the bedroom are a lamp, a bed, a dresser, a
- mirror, and a werewolf.
-
- First, you want to define the room itself:
-
- ROOM 34
- Master Bedroom
- WEST 33 (33 is the hallway)
- EAST 35 (35 is the bathroom)
- NORTHEAST 36 (36 is the closet)
- END_ROOM
-
- A description of the room is appropriate here:
-
- ROOM_DESCR 34
- This is the master bedroom, where Mommy and Daddy usually sleep. Plainly
- visible in the room are a bed, a dresser, a lamp, and a large wall mirror.
- The room smells horrible, as if a large, unclean animal had been here
- recently.
- END_ROOM_DESCR
-
- Note that this description mentions the nouns that are initially in the room.
- This is OK, since all of the nouns are UNMOVABLE, but if they could be taken
- by the player, they should not be described in the room description since they
- may not be there if the player should return.
-
- That werewolf is begging to be described, too:
-
- CREATURE 315
- Werewolf
- Black
- There is a menacing black werewolf here.
- LOCATION 34
- WEAPON 217 <-- Noun 217 will kill it
- HOSTILE <-- ever met a friendly werewolf?
- END_CREATURE
-
- CREATURE_DESCR 315
- The werewolf is about the size of a small horse. Its matted fur stinks,
- and a sickening smell emerges from its open mouth, through which you can
- see sharp, large teeth.
- END_CREATURE_DESCR
-
-
- 29
-
- A HELP message might be given as follows:
-
- HELP 34
- The werewolf looks dangerous. Perhaps, you should get out of here as fast
- as you can.
- END_HELP
-
- Finally, each noun within the room ought to be defined and described:
-
- NOUN 220
- Bed
- Large
- There is a large (king-size) bed here.
- LOCATION 34
- UNMOVABLE
- END_NOUN
-
- NOUN_DESCR 220
- The bed is quite ordinary.
- END_NOUN_DESCR
-
- NOUN 221
- Dresser
- Wooden
- There is a large wooden dresser here.
- LOCATION 34
- CLOSABLE
- CLOSED
- UNMOVABLE
- END_NOUN
-
- NOUN_DESCR 221
- The wooden dresser looks pretty much like most wooden dressers.
- END_NOUN_DESCR
-
- NOUN 222
- Lamp
- Small
- There is a lamp on the dresser.
- LOCATION 34
- UNMOVABLE
- END_NOUN
-
- NOUN_DESCR 222
- The small table lamp is pink and has a green shade.
- END_NOUN_DESCR
-
- NOUN 223
- Mirror
- Strange
- There is a wall-size mirror here.
- LOCATION 34
- UNMOVABLE
- END_NOUN
-
-
-
-
-
- 30
-
- NOUN_DESCR 223
- As you gaze into the mirror, you sense something unusual about it. It
- seems to shimmer, and your reflection seems somehow unreal, as if the
- mirror weren't really there at all.
- END_NOUN_DESCR
-
- Hmm. That mirror seems rather interesting. Maybe you could make a "special"
- out of it. For example: when the player touches it, s/he is sent to room 50,
- the mystic cavern of the Wizardess. To do so, you need to add a "special" to
- room 34 and specify the mirror as its key, and you need to make the mirror
- touchable. (Note: "touch" and "push" are synonyms -- but, you should use the
- word "push," not the word "touch," in your definitions.)
-
- ROOM 34
- Master Bedroom
- WEST 33 (33 is the hallway)
- EAST 35 (35 is the bathroom)
- NORTHEAST 36 (36 is the closet)
- SPECIAL 50 <-- Special goes to room 50 (cavern)
- KEY 223 <-- Special activated by touching mirror
- END_ROOM
-
- NOUN 223
- Mirror
- Strange
- There is a wall-size mirror here.
- LOCATION 34
- UNMOVABLE
- PUSHABLE <-- Here's how we'll activate the special
- END_NOUN
-
- The player will see room 50's description when s/he gets there, but the
- SPECIAL text for room 50 will be displayed first:
-
- SPECIAL 50
- You reach out to touch the mirror, and are shocked to find that your
- fingers vanish through the surface. Before you can react, you feel
- yourself drawn forward through the mirror, and into a black nothingness.
- You look back to try to see the mirror, but everything is black.
-
- You are falling, but not very quickly -- it's almost as if you are
- floating. As you fall, your eyes begin to adjust to the darkness. Then,
- suddenly, you land on a soft cushion of some sort. As you rest on the
- cushion, your eyes adjust to the very dim light of this new room.
- END_SPECIAL
-
- (Note that usually, you'd want to have a PUSH_DESCR prepared for when the
- player touches a noun when it doesn't activate a special, but the mirror can't
- be moved so it will always activate a special when touched.)
-
-
- SCORING
-
- The player's progress in the game is reported in two ways: the number of rooms
- visited, and the number of points currently held. The player receives the
- defined number of points for visiting each room (default point value is 0),
- and for possessing (i.e., carrying, wearing or in the current room or in the
- treasure room) each noun (or creature with points) when scoring is done. The
-
- 31
-
- point defaults for both nouns and creatures are zero. Players get no points
- for having eaten something, since objects which are eaten or drunk are removed
- from the game.
-
- For best results, it is best to assign a point value to each room which the
- player arrives at after solving some puzzle. It's also wise to award a few
- points for out-of-the-way rooms. Objects should only have point values if
- they can reasonably be expected to be carried at the end of game -- if an
- object is too heavy to be lifted or moved, it's not logical to assign it a
- point value.
-
-
- OTHER DATA ITEMS IN THE .DAT FILE
-
-
- INTRODUCTION or INTRO TEXT
-
- In the .DAT file, you can include some introductory remarks by using the
- header INTRO or INTRODUCTION and ending these remarks with END_INTRO. These
- kinds of remarks are particularly useful for telling the player what has
- happened prior to his arrival in the game's starting room. The introductory
- text is displayed during the game's initialization and cannot be re-read
- later. It also cannot be skipped over.
-
-
- STARTING ROOM
-
- A AGT adventure normally starts in room number 2. This location can be
- over-ridden by specifying an alternative location in the .DAT file. For
- example, if the .DAT file had:
-
- STARTING_ROOM 23
-
- then the game would start in room 23.
-
-
- TREASURE ROOM
-
- Normally, the player only gets points for visiting rooms and for possessing
- treasures (i.e., nouns or creatures with value). However, many classic
- adventure games use a convention that required the player to bring his various
- treasures to a "Treasure Room". Probably, the best example of this is the
- Well House in the original "Colossal Cave" adventure. AGT adds this feature
- by allowing the game designer to specify a treasure room in the .DAT file as:
-
- TREASURE_ROOM 41 (or wherever)
-
- Normally, there is no treasure room. This option is only activated if a
- statement like the above appears in the .DAT file.
-
-
- VERB SYNONYMS
-
- To specify verb synonyms, simply create a AGT definition starting with
- VERB (alone on a line) and ending with END_VERB (alone on a line). For
- example:
-
-
-
- 32
-
- VERB
- KILL STAB CHOP
- ATTACK STRANGLE CHOKE THROTTLE
- UP CLIMB ASCEND
- END_VERB
-
- In the above example, if the player types STAB THE DWARF WITH THE KNIFE, AGT
- will translate the sentence to KILL THE DWARF WITH THE KNIFE and attempt to do
- so. Synonyms do not replace the original verb, e.g., the verb KILL would also
- work. Likewise, if the player types CLIMB the game will execute the sentence
- as if the player had typed UP -- which means that CLIMB DOWN would be
- translated to UP DOWN which would, of course, confuse the game somewhat and
- generate an error message which might, in turn, confuse the player.
-
- Because the verb synonyms are not actually user-defined verbs, you should
- think carefully about the possible uses of words you add, to make sure the
- player won't be confused by the meaning of a word.
-
- WARNING: It is NOT possible to define a synonym for a synonym. For example,
- the following entry would generate an error message:
-
- VERB
- ATTACK CHOKE
- CHOKE STRANGLE <-- "Verb not recognized - Line ignored"
- END_VERB
-
- Verb synonyms defined as those above are "global" in that they apply in each
- room of the game. On the other hand, room synonyms apply only in the
- particular room for which they are defined. Room synonyms take precedence
- over global synonyms. For example, you could define CHOKE to be a synonym for
- ATTACK globally (as above), then define CHOKE to be a synonym for PULL in a
- particular room. If you were in that room, CHOKE would be treated like the
- verb PULL; outside of that room CHOKE would be treated as if you had input
- the verb ATTACK.
-
-
- GAME_WIN
-
- Acquiring all the points defined in the game doesn't let the player "win," and
- winning isn't even related to points. If you define a room as GAME_WIN, then
- the player wins the game upon entering the room, and the game ends and the
- final score is displayed. It is usually desirable to make that room very
- difficult to enter and not let the player get there unless he or she has done
- everything else there is to do.
-
- The room description is displayed, so you should put your congratulatory
- description there. For example:
-
- ROOM 21
- End of the Rainbow
- GAME_WIN
- POINTS 50
- END_ROOM
-
- ROOM_DESCR 21
- At long last, you have reached the end of the rainbow. The pot of gold
- lies at your feet. You have won the game!!
- END_ROOM_DESCR
-
- 33
-
-
- Note that is also possible to win the game when a specific Noun is acquired.
- This is done be putting a GAME_WIN in the Noun's specification.
-
-
- GAME_END
-
- If you desire to have the game end, without having the player win, you can use
- a GAME_END in the room definition. When this is done, the game will end when
- the player enters the room and the final score is displayed. The room
- description is also displayed, so you should put any final comments to the
- player in the room description. For example:
-
- ROOM 26
- End of the trail
- GAME_END
- END_ROOM
-
- ROOM_DESCR 26
- You have reached the end of the trail. There is no turning back.
- Sorry, but your adventure is OVER!
- END_ROOM_DESCR
-
-
- PAGE PAUSES
-
- Normally, the game pauses after every 22 lines of text (so that the player can
- read it), and the player then hits <CR> to read more. As you play-test your
- game, you might try to adjust your paragraph or line spacing so that the page
- breaks don't come at awkward spots and confuse the player. This is probably
- most important in the title screen and the INSTRUCTION and INTRO texts; it is
- less controllable in the individual room descriptions.
-
-
- ORDER OF DEFINITIONS
-
- AGT doesn't require that the definitions be in any specific order within the
- data files. Definitions can be freely mixed throughout your data files.
- You'll probably want to group items together that logically belong together.
- That's how the sample games were written. The order of definitions in the
- file has no effect on game performance, as long as each definition is properly
- structured.
-
-
- HOW TO INCLUDE COMMENTS IN YOUR AGT DATA FILES
-
- Within your data file, you'll probably want to include comments which won't be
- processed by the game itself, so you'll be able to understand why you did
- certain things.
-
- In general, AGT treats anything it doesn't understand as a comment. Thus, if
- you have a paragraph of text in between definitions, AGT will usually ignore
- it.
-
- BEWARE: If one of the lines in the paragraph begins with a keyword like "noun"
- or "text," AGT will probably decide that it's the beginning of a definition
- and get confused.
-
-
- 34
-
- To avoid this, you can use a nonsense word to start each line of a comment:
- words like "REM" (for remark) are useful since they also clearly state what
- the line is.
-
- AGT ignores most punctuation completely, so using "comment" indicators like
- "(*" and "*)" or { and } at the beginning of a line won't help. However,
- using these kinds of comment indicators will make your game files easier to
- read. AGT usually only sees alphabetic characters ('a'..'z' and 'A'..'Z') or
- the digits ('0'..'9').
-
-
- CREATING YOUR SOURCE DATA FILES WITH WORD PROCESSORS
-
- When creating your source data files for your AGT game, you must use a word
- processor which creates plain ASCII/DOS text files with a true carriage return
- at the end of each line. Lines longer than 80 characters, and WordStar
- document files, will cause AGT to abort! The best rule-of-thumb is to use the
- MS-DOS "TYPE" command to view the file. If it looks normal, it's probably OK
- for AGT. If words split at the end of the line and strange characters appear,
- it's probably not OK for AGT.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 35
-
- PART 3: USING META-COMMANDS IN PROFESSIONAL LEVEL ADVENTURE GAMES
-
-
- Before discussing meta-commands in detail, it is convenient to present a quick
- overview of other changes in Professional Level games. The principal changes
- are the addition of custom user-defined verbs and Maximum_Score to the .DAT
- file (NOTE: everything else about the .DAT files as previously presented still
- applies in Professional Level games), the addition of a .MSG file to hold your
- unique output messages, and the addition of a .CMD file to hold your game's
- meta-commands. Each of this will be presented below in separate sections.
-
-
- CUSTOM USER-DEFINED VERBS
-
- Custom user-defined verbs are defined very much like "Verb Synonyms". For
- example, the following lines in the .DAT file will define several new verbs
- (and synonyms):
-
- VERB
- Dummy_Verb1 KISS HUG LOVE CARESS
- Dummy_Verb2 GO CLIMB CROSS
- Dummy_Verb3 CUT CHOP BREAK CRACK BUST
- Dummy_Verb4 JUMP LEAP
- Dummy_Verb5 SEARCH FIND
- END_VERB
-
- AGT adds 50 "dummy verbs" (Dummy_Verb1 ... Dummy_Verb50) to the list of valid
- verbs. These dummy verbs are then redefined as if they had synonyms in
- statements like the ones above. These user-defined verbs are then used in
- meta-commands to specify new conditional tests and appropriate actions. For
- example, the following meta-commands (in the .CMD file) would allow the player
- to CLIMB a tree and to CROSS a bridge:
-
- COMMAND CLIMB TREE
- InRoom 208 (* sturdy oak tree *)
- GoToRoom 36 (* in branches at top of oak tree *)
- PrintMessage 43 (* You climb up to the top of the tree. *)
- DoneWithTurn
- END_COMMAND
-
- COMMAND CROSS BRIDGE
- AtLocation 23 (* West side of bridge *)
- GoToRoom 24 (* East side of bridge *)
- PrintMessage 44 (* You walk across the bridge to the other side. *)
- DoneWithTurn
- END_COMMAND
-
- COMMAND CROSS BRIDGE
- AtLocation 24 (* East side of bridge *)
- GoToRoom 23 (* West side of bridge *)
- PrintMessage 44 (* You walk across the bridge to the other side. *)
- DoneWithTurn
- END_COMMAND
-
- The above meta-commands could also have been done by CHANGE_LOCATION
- specials. However, custom verbs and meta-commands can also be used to
- create more unusual situations, like these meta-commands for processing
- the user's input to KISS or HUG something:
-
- 36
-
-
- COMMAND KISS PRINCESS
- InRoom 305 (* Princess *)
- AtLocation 99 (* Bridal Suite of palace *)
- PrintMessage 45 (* The princess melts into your strong arms, etc. *)
- PlusScore 25 (* Bonus for Kiss *)
- WinGame (* Win the game *)
- DoneWithTurn
- END_COMMAND
-
- COMMAND KISS PRINCESS
- InRoom 305 (* Princess *)
- NOT AtLocation 99 (* Not in Bridal Suite of palace *)
- PrintMessage 46 (* The princess pushes you away coyly, "Not here!" *)
- DoneWithTurn
- END_COMMAND
-
- COMMAND KISS TROLL
- InRoom 307 (* Ugly Troll *)
- PrintMessage 47 (* The troll kills you! *)
- KillPlayer (* That will teach you to KISS THE TROLL!! *)
- DoneWithTurn
- END_COMMAND
-
- COMMAND KISS ANY
- NOUNpresent (* NOUN (whatever it is) is here *)
- PrintMessage 48 (* You try to $VERB$ the $NOUN$ for awhile. *)
- MinusScore 10 (* penalty for sick mind *)
- DoneWithTurn
- END_COMMAND
-
- COMMAND KISS ANY
- PrintMessage 49 (* The $ADJECTIVE$ $NOUN$ isn't here! *)
- MinusScore 10 (* penalty for sick mind *)
- DoneWithTurn
- END_COMMAND
-
- Meta-commands are processed in the order encountered in the .CMD file, so the
- last two KISS ANY commands represent "default" commands and would be activated
- only if you weren't trying to KISS, HUG, etc. the PRINCESS or the TROLL. For
- example, if you gave the input "KISS THE BLARNEY STONE", the game would
- respond with "You try to kiss the stone for a while" (Message number 48 in the
- .MSG file) or "The blarney stone isn't here!" (Message number 49) depending
- upon if the Blarney stone is present at your current location or not.
-
-
- MAXIMUM_SCORE
-
- AGT allows the score to be manipulated via meta-language commands. For
- example, using meta-language commands, one could adjust the score whenever the
- player:
-
- -- Accepts a hint
- -- Solves a particularly difficult puzzle
- -- Gives the correct answer to a riddle
- -- Performs a daring and/or noble act
-
- The score can be manipulated either positively or negatively in this way.
-
- 37
-
-
- Since in AGT you may add (or subtract) points from your score via your deeds,
- the maximum score for the game will often be different from the sum of the
- scores for visiting rooms and possessing objects. In this situation, you will
- need to specify a maximum score for the game in the .DAT file. For example,
- to have a maximum score of 350 points for the game you would put the following
- statement in the game's .DAT file:
-
- MAXIMUM_SCORE 350
-
-
- .MSG -- MESSAGE FILES
-
- A file with the suffix of .MSG can contain up to 250 messages that are used by
- various meta-language commands. The format for each message is straight-
- forward text as follows:
-
- MESSAGE 4
- "Oh, NNOOO!! Not the dog!", he cried hysterically.
- END_MESSAGE
- .
- .
- MESSAGE 87
- As you say $VERB$ into the microphone, the security door slides open
- noiselessly. You hurry into the vault. The door closes behind you.
- END_MESSAGE
-
- The messages need not be in numerical order, but it helps for debugging.
-
- In any message, the game designer can use $VERB$, $NOUN$, $ADJECTIVE$,
- $PREPOSITION$, $OBJECT$ and $NAME$ wherever he wants to have the original
- verb, the noun, the noun's adjective, the preposition, the objective of the
- preposition or the name of the person the command is addressed to (if any)
- echoed back in a message. $VERB$ uses the original verb which is input by
- the player, not the verb for which it may be a synonym, e.g., if SPEAK is a
- synonym for TALK and you input the verb SPEAK, the above MESSAGE 87 would
- output "As you speak into the microphone..."
-
-
- A TYPICAL GAME TURN FOR PROFESSIONAL LEVEL GAMES
-
- Before launching into a detailed discussion of meta-commands, it will be
- helpful to review what happens during a typical turn in a AGT game. This is
- illustrated in the following diagram:
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 38
-
-
- > Get Player's Input Command <
-
-
- V
-
- Parse into Addressee's Name (if
- any), then Noun, Verb, Prep, Obj
-
-
- V
-
- Any YES Give
- Errors > Error
- ? Message
-
- NO
- V
-
- Any
- Meta- NO
- Language
- Commands
- ?
-
- YES
- V
-
- Do meta-commands for ANY Words
-
-
- V
-
- YES All
- < Done
- ?
-
- NO
- V
-
- Do meta-commands for Input Words
-
-
- V
-
- YES All
- < Done
- ?
-
- NO
- V
-
- Do Standard AGT routine for Verb <
-
-
-
-
- The meta-command boxes shown above are for Professional Level AGT games only.
-
- 39
-
- Now for a brief description of what these meta-command boxes do in an AGT
- game. The first meta box represents the process of testing for conditions and
- performing various actions that do not depend on the player having given a
- specific Addressee-Verb-Noun-Object combination, i.e., conditions and actions
- for ANY words. These kinds of situations are typically "random" events, such
- as, (1) having a dwarf appear in the room and throw an axe at the player, or
- (2) having a bear (that the player has befriended) follow him into a new room,
- or (3) having a voice boom out an announcement that "The Cave will close in 25
- turns", or (4) having the player die because of some random event (e.g.,
- falling into a pit). During each turn, these ANY-words meta-commands are
- checked to see if the commands' conditions are true and (if true) the
- meta-commands' designated actions are taken. This ANY-words process occurs
- before any specific vocabulary-dependent meta-commands are executed. Often,
- the results of these ANY-words events will make subsequent actions unnecessary
- and/or inappropriate. For example, if a player dies a horrible death by a
- random dwarf attack, finishing the player's specific command like GET GOLD or
- EXAMINE BOOK is certainly inappropriate.
-
- Here are a few examples of typical ANY Meta-Commands:
-
- COMMAND ANY
- Present 210 (* Blazing torch is here *)
- CounterGT 2 75 (* Torch has been lit for at least 75 turns *)
- PrintMessage 21 (* Your torch is flickering and growing weaker *)
- CounterEquals 2 100 (* Torch has been lit for 100 turns *)
- PrintMessage 22 (* The torch finally goes out! *)
- TurnCounterOFF 2 (* Torch has gone out, so turn torch counter OFF *)
- SwapLocations 210 211 (* swap blazing torch for unlit torch *)
- END_COMMAND
-
- COMMAND ANY
- NOT Present 312 (* Angry guard is not in room (yet) *)
- Chance 10 (* 10 % chance of guard appearing *)
- PutInCurrentRoom 312 (* put guard in room *)
- PrintMessage 23 (* An angry guard suddenly storms into the room! *)
- END_COMMAND
-
- COMMAND ANY
- FlagON 5 (* Flag 5 is ON if player has befriended parrot *)
- PutInCurrentRoom 306 (* Once befriended, parrot stays with player *)
- VerbIsDirection (* Player is going to new room *)
- PrintMessage 24 (* The parrot flies after you and lands nearby. *)
- END_COMMAND
-
- COMMAND ANY
- InRoom 306 (* The parrot is here *)
- FlagOFF 4 (* Parrot is thirsty if Flag 4 is OFF *)
- Chance 5 (* 5 % chance of parrot talking *)
- PrintMessage 25 (* The parrot squawks "Polly wants a beer!" *)
- END_COMMAND
-
- COMMAND ANY
- InRoom 308 (* A vampire bat is here *)
- Chance 5 (* 5 % chance of being bitten *)
- PrintMessage 26 (* The vampire bat bites you on the neck!! *)
- KillPlayer (* Too bad, but vampire bat bites are fatal! *)
- DoneWithTurn (* No further process for this turn *)
- END_COMMAND
-
- 40
-
-
- If the ANY-words meta-commands have not drastically changed the player's
- status in the game, then specific Addressee-Verb-Noun-Object combination
- meta-commands are tested and (if the conditions are true) the designated
- actions are taken. Using these meta-commands is the way that the game
- designer can use unique verbs (that are not predefined in AGT). For example,
- the game designer could specify a meta-command for KISS PRINCESS that would
- first check that the princess was in the room, and (if she was) print a
- message like "The princess rudely pushes you away, straightens her crown and
- loudly says, 'Stop the hanky-panky, buzzard breath!'" The word ANY may be
- substituted for the Verb, or the Noun, or the Object in a meta-command. For
- example, a meta-command for ATTACK ANY might be used to specify a "default"
- response for the verb ATTACK, such as, printing a message like "Don't be
- ridiculous, $VERB$ing the $NOUN$ is really sick!" If the player entered the
- command ATTACK THE DOOR, the response would be "Don't be ridiculous, attacking
- the door is really sick!"
-
- Meta-commands can also be used to supplement or replace standard verb
- processing. For example, a meta-command could be used for verbs like READ,
- GET, EAST, etc. This type of substitution of meta-commands for standard verbs
- could be used to (1) cause a key to fall out of a book the first time the
- player gave the command to GET BOOK, (2) cause a player to go into a
- hallucinatory state (i.e., a new room) whenever he gives the command DRINK THE
- STRANGE LIQUID, or (3) cause a player to fall to his death on the rocks far
- below if he gives the command NORTH (where there is a cliff to the north in
- the current room).
-
- If after doing both the ANY-words and the specific vocabulary meta-command
- processing for a specific game turn, the player is still alive and further AGT
- command processing is still appropriate, then the usual routine for the
- player's verb is executed (if the input VERB is a standard AGT verb). This
- will be the way that the most of the player's inputs will be handled!
- Remember, most player commands in a typical adventure game deal with
- manipulating items (GET, DROP, EXAMINE, READ, etc.) and traveling from room to
- room (NORTH, SOUTH, UP, EXIT, etc). Standard Level AGT handles these types of
- commands quite nicely, and there will seldom be a need for meta-commands for
- this type of typical player input.
-
-
- INTRODUCTION TO META-COMMANDS
-
- Meta-commands are specified in the .CMD file. The .CMD file can hold up to
- 400 meta-commands. This capacity will enable the game designer to develop
- some very sophisticated adventure games -- especially since the a majority of
- a player's input will not require any meta-commands at all.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 41
-
- THE FORMAT OF META-COMMANDS
-
- A typical meta-command in the .CMD file might look like this:
-
- COMMAND BREAK LOCK
- InRoom 208 (* Oak door with iron lock *)
- NOT InRoom 307 (* Evil Wizard is not in room *)
- IsCarrying 223 (* Battle Axe *)
- OR
- Present 246 (* Large Two-handed Sword *)
- VariableGT 7 90 (* Player has enough strength to swing sword *)
- FlagON 3 (* Sword has been pulled free from stone *)
- OR
- IsCarrying 221 (* Iron Mace *)
- VariableGT 7 50 (* Player has enough strength to swing mace *)
- SwapLocations 208 209 (* Swap locked oak door with open doorway *)
- PrintMessage 86 (* Your blows break the lock and door swings open *)
- ChangePassageway 1 25 (* open passage North (Dir 1) to room 25 *)
- DoneWithTurn (* No further process for this turn *)
- END_COMMAND
-
- Each meta-command begins on a separate line with the keyword COMMAND.
- Following this is the input phrase for which this meta-command applies. The
- input phrase will be parsed, so you can use extra words for clarity. After
- being parsed, AGT will only remember the ADDRESSEE (if there is one), the
- VERB, the NOUN and the OBJECT of the COMMAND. If one of these is missing,
- there is an implied ANY for the missing item. For example, the "BREAK LOCK"
- above is missing an OBJECT (and a preposition), so an implied OBJECT of ANY is
- recorded for this COMMAND. Because of this implied object of ANY, this
- meta-COMMAND would be considered for any of the following player inputs:
-
- BREAK LOCK
- BREAK THE LOCK WITH MACE
- BREAK LOCK WITH THE LARGE SWORD
- BREAK LOCK WITH AXE
- BREAK LOCK WITH ROCK (will not produced desired result)
- BREAK LOCK WITH DWARF'S HEAD (will not produced desired result)
-
- If the COMMAND is an ANY meta-command, the word ANY will be the only word
- follow the word COMMAND. The end of the meta-command is signalled by
- END_COMMAND on a separate line.
-
- Between COMMAND and END_COMMAND are a series of conditional tests and actions
- to be performed. Each condition or action appears on a separate line. The
- first word of the action or condition line is the "Token", or abbreviation for
- the action or condition. AGT allows 155 such tokens. These tokens are a
- short-hand description of what condition is being tested or what action is to
- be performed. The tokens are normally shown with each of the separate words
- of the short-hand description capitalized, e.g. PrintMessage. This is only
- for better readability. Internally, AGT does not distinguish between upper
- and lower case in tokens.
-
- There may be some numerical parameters on the line following the token. The
- number of parameters varies from none to two depending upon the specific
- token. For example, the token "KillPlayer" has no numerical parameters; the
- token "PrintMessage" requires one numerical parameter (i.e., the number of the
- message to be printed); the token "SwapLocations" requires two numerical
- parameters (i.e., the two item numbers of the items to have their locations
-
- 42
-
- switched). Following the parameters (if any) on the line is space for
- comments. It is recommended that meta-commends be very well commented and
- that the comments be written as the meta-commands are first written. Don't
- try to document them afterwards -- because you'll never get around to really
- doing it! For added clarity, comments should be set off by some type of
- delimiter, such as, "(*", "*)" or "{", "}" or a preceding ";".
-
- If a conditional token is preceded on the line with the word "NOT", the sense
- of the conditional test is reversed, i.e., NOT InRoom 307 tests that creature
- number 307 (the evil wizard) is NOT in the current room.
-
- The token OR may be used to connect two or more separate conditional tests
- within a meta-command. The overall test will be TRUE if any of the individual
- OR conditions is TRUE. In the above example, the sequence
-
- IsCarrying 223 (* Battle Axe *)
- OR
- Present 246 (* Large Two-handed Sword *)
- VariableGT 7 90 (* Player has enough strength to swing sword *)
- FlagON 3 (* Sword has been pulled free from stone *)
- OR
- IsCarrying 221 (* Iron Mace *)
- VariableGT 7 50 (* Player has enough strength to swing mace *)
-
- tests if the player is carrying or has access to one (or more) of the heavy
- weapons which is capable of breaking the lock on the door.
-
- If there isn't an OR token between two conditions, there is an implied AND
- condition between successive conditions. The end of the series of OR's is
- determined when AGT encounters the first Action token following the first OR.
- For example, the above meta-command might be rewritten in pseudo-PASCAL as:
-
- IF (Verb = 'BREAK') AND (Noun = 'LOCK') THEN (* "BREAK LOCK" *)
- IF InRoom(208) THEN (* Locked oak door is here *)
- IF (NOT InRoom(307)) THEN (* Wizard not here *)
- IF IsCarrying(223) (* Player has means to break door *)
- OR (Present(246) AND (Variable[7] > 90) AND FlagON[3])
- OR (IsCarrying(221) AND (Variable[7] > 50)) THEN
- BEGIN
- SwapLocations(208,209); (* Swap open doorway for locked door *)
- PrintMessage(86); (* Print appropriate message *)
- ChangePassageway(1,25); (Open passage north to room 25 *)
- DoneWithTurn := TRUE; (* Nothing more for this turn *)
- END;
-
- When processing a meta-command, AGT starts at the first action or condition
- and continues to process each token until one of the conditions within the
- meta-command is not met, i.e., it is FALSE, then AGT skips to the next
- meta-command within the .CMD file. For example, consider the following:
-
-
-
-
-
-
-
-
-
-
- 43
-
- COMMAND ANY
- Present 210 (* Blazing torch is here *)
- CounterGT 2 75 (* Torch has been lit for at least 75 turns *)
- PrintMessage 21 (* Your torch is flickering and growing weaker *)
- CounterEquals 2 100 (* Torch has been lit for 100 turns *)
- PrintMessage 22 (* The torch finally goes out! *)
- TurnCounterOFF 2 (* Torch has gone out, so turn torch counter OFF *)
- SwapLocations 210 211 (* swap blazing torch for unlit torch *)
- END_COMMAND
-
- In this meta-command, Counter number 2 is used to keep track of the number of
- turns that the torch has been blazing. If the blazing torch isn't being
- carried by the player or in the current room, the very first condition is
- FALSE and AGT would skip ahead to the next meta-command -- i.e., no further
- tokens in this meta-command would be considered. However, if the blazing
- torch was present in the room, AGT would consider the second condition,
- specifically, if the torch has been blazing for more than 75 turns. If it
- has, then the next token would cause message 21 to be printed. Then the next
- token would test if the torch has been blazing for exactly 100 turns. If it
- hasn't, then AGT skips ahead to the next meta-command in the .CMD file. If
- the torch has been blazing for exactly 100 turns, then the last three tokens
- (all action tokens) are processed and message 22 is printed, the blazing torch
- counter is turned OFF, and an unlit torch (noun number 211) is swapped for the
- blazing torch (noun number 210). For example, the above meta-command might be
- rewritten in pseudo-PASCAL:
-
- IF (Verb = 'ANY') THEN (* ANY and ALL commands *)
- IF Present(210) THEN (* Blazing torch *)
- IF (Counter[2] > 75) THEN (* Torch burning for more than 75 turns *)
- BEGIN
- PrintMessage(21); (* The torch is growing weaker. *)
- IF (Counter[2] = 100) THEN (* Torch burning exactly 100 turns *)
- BEGIN
- PrintMessage(22); (* The torch goes out. *)
- TurnCounterOFF(2); (* Turn burn counter off *)
- SwapLocations(210,211); (* Swap for unlit torch *)
- END;
- END;
-
- META-COMMANDS CONDITIONAL TESTS
-
- The are a total of 84 separate condition tokens in AGT. Since each of this
- conditions may be prefaced by a NOT condition, there are actually a total of
- 168 conditional tests possible within a meta-command. These conditional tests
- divide into several logical groups:
-
- - Tests about the player's status and/or condition
- - Tests about the status/condition of specific item(s)
- - Tests about the status/condition of the current NOUN
- - Other miscellaneous tests
-
- Let's consider each of these logical groups in order. First, tests about the
- player's status and/or condition:
-
- *********************** PLAYER CONDITIONS ******************************
- Number/Types
- TOKEN NAME Of Parameters Explanation
- ==================== ============= =========================================
-
- 44
-
- AtLocation 1 Location# Player is located at room Location#
- AtLocationGT 1 Location# Player is in room greater than Location#
- AtLocationLT 1 location# Player is in room less than Location#
- FirstVisitToRoom 0 None First visit to current room
- IsCarryingSomething 0 None Player is carrying something
- IsCarryingNothing 0 None Player is carrying nothing
- IsCarryingTreasure 1 Points# Player is carrying at least one item
- that is worth at least Points#
- IsWearingSomething 0 None Player is wearing something
- IsWearingNothing 0 None Player is wearing nothing
- LoadWeightEquals 1 Number Player's load weighs equals Number
- LoadWeightGT 1 Number Player's load weighs more than Number
- LoadWeightLT 1 Number Player's load weighs less than Number
- NewLife 0 None Player has just been resurrected or
- it is the start of the game
-
- All these tokens test conditions about the player current status, i.e., where
- he is/isn't located, if he is/isn't wearing or carrying something, and if his
- current load weighs a certain amount. All these conditions are obvious except
- for
-
- IsCarryingTreasure 10 (* Has something worth at least 10 points *)
-
- which might be used to test whether it is appropriate to have some type of
- thief (randomly) rob the player of his valuables.
-
- The second group of conditions test the status of various items or nouns:
-
- *********************** ITEM(S) CONDITIONS *****************************
- Number/Types
- TOKEN NAME Of Parameters Explanation
- ==================== ============= =========================================
- Present 1 Item# Item# is in room, carried or worn
- IsWearing 1 Item# Item# is being worn
- IsCarrying 1 Item# Item# is being carried
- IsNowhere 1 Item# Item# is located NOWHERE (room 0)
- IsSomewhere 1 Item# Item# is located somewhere (not in 0)
- InRoom 1 Item# Item# is located in current room
- IsLocated 2 Item# Loc# Item# is located in room Location#
- Together 2 Itm1# Itm2# Itm1# and Itm2# are in same place
- IsON 1 Item# Item# is ON
- IsOFF 1 Item# Item# is OFF
- IsOpen 1 Item# Item# is Open
- IsClosed 1 Item# Item# is Closed
- IsLocked 1 Item# Item# is Locked
- IsUnLocked 1 Item# Item# is UnLocked
- IsEdible 1 Item# Item# is Edible
- IsDrinkable 1 Item# Item# is Drinkable
- IsPoisonous 1 Item# Item# is Poisonous
- IsMovable 1 Item# Item# is Movable
- IsGroupMember 1 Item# Item# is a member of the group
-
- All but two of the above tokens require one parameter: the number of the item
- for which the conditional test is being considered. Examples of these two
- exceptions are:
-
- IsLocated 205 34 (* Tests if Noun number 205 is in Room 34 *)
- Together 256 257 (* Tests if Nouns 256 and 257 are together *)
-
- 45
-
-
- The next group of conditional tokens is similar to the above except that they
- are tests for the current NOUN which has been input, not a specific item:
-
- ************************ NOUN CONDITIONS *******************************
- Number/Types
- TOKEN NAME Of Parameters Explanation
- ==================== ============= =========================================
- NOUNPresent 0 None NOUN is in room, carried or worn
- NOUNIsWearing 0 None NOUN is being worn
- NOUNIsCarrying 0 None NOUN is being carried
- NOUNIsNowhere 0 None NOUN is located NOWHERE (room 0)
- NOUNIsSomewhere 0 None NOUN is located somewhere (not in room 0)
- NOUNInRoom 0 None NOUN is located in current room
- NOUNIsLocated 1 Location# NOUN is located in room Location#
- NOUNIsON 0 None NOUN is ON
- NOUNIsOFF 0 None NOUN is OFF
- NOUNIsOpen 0 None NOUN is Open
- NOUNIsClosed 0 None NOUN is Closed
- NOUNIsLocked 0 None NOUN is Locked
- NOUNIsUnLocked 0 None NOUN is UnLocked
- NOUNIsEdible 0 None NOUN is Edible
- NOUNIsDrinkable 0 None NOUN is Drinkable
- NOUNIsPoisonous 0 None NOUN is Poisonous
- NOUNIsMovable 0 None NOUN is Movable
- NOUNpointsEquals 1 Number NOUN's points equal Number
- NOUNpointsGT 1 Number NOUN's points are greater than Number
- NOUNpointsLT 1 Number NOUN's points are less than Number
- NOUNweightEquals 1 Number NOUN's weight equals Number
- NOUNweightGT 1 Number NOUN's weight is greater than Number
- NOUNweightLT 1 Number NOUN's weight is less than Number
-
- The above tokens are especially useful if the game designer wants to create
- his own unique standard default responses to situations, rather than relying
- on the normal AGT responses. For example, below are new default responses for
- the verb GET:
-
- COMMAND GET ANY
- NOUNInRoom (* NOUN is in current room *)
- NOUNIsMovable (* NOUN can be moved *)
- LoadWeightLT 90 (* carrying less than 90 pounds *)
- NOUNweightLT 11 (* NOUN is less than 11 pounds *)
- GetNOUN (* Add NOUN to items being carried *)
- PrintMessage 1 (* You add the $NOUN$ to your load. *)
- DoneWithTurn (* Nothing more required for this turn *)
- END_COMMAND
-
- COMMAND GET ANY
- NOUNIsCarrying (* NOUN is currently being carried *)
- PrintMessage 2 (* You already have it, Stupid! *)
- DoneWithTurn (* Nothing more required for this turn *)
- END_COMMAND
-
- COMMAND GET ANY
- NOT NOUNPresent (* NOUN is NOT present *)
- PrintMessage 3 (* The $NOUN$ isn't here, you oaf! *)
- DoneWithTurn (* Nothing more required for this turn *)
- END_COMMAND
-
- 46
-
-
- COMMAND GET ANY
- NOT NOUNIsMovable (* NOUN cannot be moved *)
- PrintMessage 4 (* Sorry, but the $NOUN$ cannot be moved! *)
- DoneWithTurn (* Nothing more required for this turn *)
- END_COMMAND
-
- COMMAND GET ANY
- NOUNIsMovable (* NOUN can be moved *)
- LoadWeightGT 89 (* carrying 90 pounds or more already *)
- PrintMessage 5 (* Your load is too heavy to carry the $NOUN$. *)
- DoneWithTurn (* Nothing more required for this turn *)
- END_COMMAND
-
- A series of COMMANDS like these is processed sequentially by their order of
- appearance in the .CMD file. As a result, the COMMAND's order is very
- important! For example, if the player gave the input GET STATUE and the
- statue was not in the room and was also not movable, the error message "The
- statue isn't here, you oaf!" would be printed rather than "Sorry, but the
- statue cannot be moved!" because of the order of their respective COMMANDS
- above (or in the .CMD file).
-
-
- The last group of conditional tokens is a catch-all:
-
- ******************** MISCELLANEOUS CONDITIONS **************************
- Number/Types
- TOKEN NAME Of Parameters Explanation
- ==================== ============= =========================================
- NamePresent 0 None Addressee is present in current room
- NameIsNumber 1 Number Addressee is Creature or Noun number
- LightPresent 0 None Current room has necessary light
- RoomNeedsLight 0 None Current room needs a light
- FlagON 1 Flag# Flag# is ON
- FlagOFF 1 Flag# Flag# is OFF
- ScoreEquals 1 Number Current score is equal to Number
- ScoreGT 1 Number Score is greater than Number
- ScoreLT 1 Number Score is less than Number
- NumberEquals 1 Number Number input is equal to Number
- NumberGT 1 Number Number is greater than Number
- NumberLT 1 Number Number is less than Number
- AnswerIsCorrect 0 None Last answer was correct
- AnswerIsWrong 0 None Last answer was wrong
- TurnsEquals 1 Number Number of turns is equal to Number
- TurnsGT 1 Number Number of turns is greater than Number
- TurnsLT 1 Number Number of turns is less than Number
- CounterEquals 2 Ctr# Number Counter# is equal to Number
- CounterGT 2 Ctr# Number Counter# is greater than Number
- CounterLT 2 Ctr# Number Counter# is less than Number
- VariableEquals 2 Var# Number Variable# is equal to Number
- VariableGT 2 Var# Number Variable# is greater than Number
- VariableLT 2 Var# Number Variable# is less than Number
- CompareVariables 2 Var#1 Var#2 Variable#1 is less than Variable#2
- VariableChance 2 Var# Number Variable# is less than a random number
- from 1 to Number
- Chance 1 Percent Odds percent, i.e., 10 % chance of TRUE
- PromptForYES 0 None Prompts for Y or N -- TRUE if Yes
- PromptForNO 0 None Prompts for Y or N -- TRUE if No
-
- 47
-
- VerbIsDirection 0 None Verb is movement or direction
-
- Just a few words of explanation about a couple of these. PromptForYES and
- PromptForNO cause the player to be queried and to respond by entering a YES
- (or Y) or NO (or N) on the keyboard. These conditions are then TRUE or FALSE
- depending upon the what is entered. These tokens are particular useful when
- you want to ask the player a question that requires a YES or NO answer like
- whether he would like a hint. AnswerIsCorrect and AnswerIsWrong are similar
- tokens for asking questions which do not have YES and NO answers like asking a
- riddle. An example of how to ask a trivia question will be given later in
- this document.
-
- The number referenced by the NumberEquals, NumberGT and NumberLT is a number
- that the player inputs via the keyboard in response to a GetNumberInput action
- token. An example of this sequence of events will be given later.
-
- The game designer has 255 Flags (1 to 255) which can be tested for being ON or
- OFF respectively by the FlagON and FlagOFF tokens. There are 9 Counters (1 to
- 9) and 9 Variables (1 to 9) which can also be tested by various tokens
- described above. How to set these Flags, Counters and Variables will be
- described in the section on ACTION tokens below.
-
-
- META-COMMANDS ACTION TOKENS
-
- There are a total of 71 separate action tokens in AGT. These actions divide
- into several logical groups:
-
- - Actions involving the player
- - Actions involving specific item(s), the NOUN or locations
- - Other miscellaneous actions
-
- Let's consider each of these logical groups in order. First, actions
- involving the player:
-
- ********************** PLAYER ACTION TOKENS ********************************
- Number/Types
- TOKEN NAME Of Parameters Explanation
- ==================== ============= =========================================
- GoToRoom 1 Location# Send player to Location#
- GoToRandomRoom 2 Loc#1 Loc#2 Randomly pick a room between Loc#1 and
- Loc#2 and send player to it
- GetIt 1 Item# Item# is now being carried
- WearIt 1 Item# Item# is now being worn
- DropIt 1 Item# Drop Item# into current room
- RemoveIt 1 Item# Remove Item# and drop into room
- GetNOUN 0 None NOUN is now being carried
- WearNOUN 0 None NOUN is now being worn
- DropNOUN 0 None Drop NOUN into current room
- RemoveNOUN 0 None Remove NOUN and drop into room
- DropEverything 0 None Drop all items being carried
- RemoveEverything 0 None Remove all items being worn
- KillPlayer 0 None Make player dead at end of turn
-
- These actions are all straight-forward.
-
-
-
-
- 48
-
- A WORD OF WARNING:
-
- When AGT encounters and processes an action token, it is done without fanfare
- or logical checking. For example, if the actions
-
- DropIt 204 (* Put the Rubber Ducky in the room *)
- WearNOUN (* Put on or Wear NOUN *)
-
- are encountered, they are done without checking whether the player is carrying
- the Rubber Ducky currently or if the NOUN is something that might be logically
- worn. The game designer is warned that this kind of logical checking before
- taking actions is his responsibility -- not AGT's!
-
- The second group of actions involve items, nouns and locations:
-
- ******************* ITEM/NOUN/LOCATION ACTION TOKENS ***********************
- Number/Types
- TOKEN NAME Of Parameters Explanation
- ==================== ============= =========================================
- PutInCurrentRoom 1 Item# Put Item# in current room
- PutNOUNInCurrentRoom 0 None Put NOUN in current room
- SendToRoom 2 Item# Loc# Put Item# in room Location#
- SendNOUNToRoom 1 Location# Put NOUN in room Location#
- SendAllToRoom 1 Location# Send all carried items to Location#
- SendTreasuresToRoom 2 Loc# Point# Send all carried items whose
- points > Point# to Loc#
- Destroy 1 Item# Item# is now NOWHERE (in room 0)
- DestroyNOUN 0 None NOUN is now NOWHERE (in room 0)
- SwapLocations 2 Itm#1 Itm#2 Swap locations of Item#1 & Item#2
- SendToItem 2 Itm#1 Itm#2 Put Itm#1 in location of Itm#2
- SendNOUNToItem 1 Item# Put NOUN in location of Item#
- OpenIt 1 Item# Item# is now open
- CloseIt 1 Item# Item# is now closed
- LockIt 1 Item# Item# is now locked
- UnlockIt 1 Item# Item# is now unlocked
- OpenNOUN 0 None NOUN is now open
- CloseNOUN 0 None NOUN is now closed
- LockNOUN 0 None NOUN is now locked
- UnlockNOUN 0 None NOUN is now unlocked
- AddToGroup 1 Item# Adds Item# to group
- RemoveFromGroup 1 Item# Removes Item# from group
- MoveGroup 1 Location# Move group to Location#
-
- Several of these deserve some explanation. SendTreasureToRoom is useful when
- the game designer wishes to have the player's current treasures or valuables
- stolen or disappear. For example:
-
- SendTreasureToRoom 28 9 (* send valuables to room 28 *)
-
- would cause any items that were being currently carried and had point values
- of 10 or more to be sent to room 28. Items being carried with values of 9 or
- less would continue to be carried. The conditional token IsCarryingTreasure
- can be used to test whether such a "theft" is appropriate.
-
- The SwapLocations action token is very useful whenever the game designer
- wishes to change the status or condition of an item. For example, this action
- can be used to replace a closed door with an open door, or to replace an egg
- with egg shell pieces (when the player gives the input BREAK EGG), or to
-
- 49
-
- replace a small plant with a larger plant (when the player inputs the command
- WATER PLANT), or to replace a frog with a handsome prince (when the player
- inputs KISS FROG). A very useful and powerful token!
-
- The last group of actions do a variety of tasks:
-
- ******************* MISCELLANEOUS ACTION TOKENS ****************************
- Number/Types
- TOKEN NAME Of Parameters Explanation
- ==================== ============= =========================================
- ShowScore 0 None Show current SCORE
- PlusScore 1 Number Add Number to current SCORE
- MinusScore 1 Number Subtract Number from current SCORE
- ShowInventory 0 None Show current INVENTORY
- WaitForReturn 0 None Print 'Hit RETURN' message and wait
- TimePasses 0 None Show 'Time passes...' message
- Delay 1 Number Delay for Number seconds
- ClearScreen 0 None Clear screen
- DescribeThing 1 Number Describe thing Number (whatever)
- LookAtRoom 0 None Cause a VERBOSE look at room
- Tone 2 Hz Ms Makes a tone on speaker of Hz Hertz (440
- Hertz = A on piano) for Ms milliseconds
- PrintMessage 1 Number Print message Number in .MSG file
- RandomMessage 2 Num1 Num2 Randomly picks a message from Num1 to
- Num2 in .MSG file and prints it
- BlankLine 0 None Print a blank line
- GetNumberInput 2 Num1 Num2 Prompt for player to input a Number
- where Num1 <= Number <= Num2.
- If Num1=Num2, then no range will be
- given in prompt.
- AskQuestion 1 Question# Ask and get answer to question#
- ChangePassageway 2 Dir# Loc# Create or close a passageway
- from current_room to Loc# via Dir#.
- Dir# = 1 = north ... Dir # = 12 = exit.
- If Loc# = 0 then closes passageway.
- If Loc# <> 0 then opens passageway
- to room Loc# via direction Dir#.
- Passageways are opened or closed at
- both ends simultaneously!
- TurnFlagON 1 Flag# Turn Flag# ON
- TurnFlagOFF 1 Flag# Turn Flag# OFF
- ToggleFlag 1 Flag# Toggle Flag#
- TurnCounterON 1 Counter# Turn Counter# ON -- sets to 1
- TurnCounterOFF 1 Counter# Turn Counter# OFF -- sets to 0
- SetVariableTo 2 Var# Number Set Variable Var# to Number
- AddToVariable 2 Var# Number Add Number to Var#
- SubtractFromVariable 2 Var# Number Subtract Number from Var#
- AddVariables 2 Var#1 Var#2 Add Var#2 and Var#1 and put answer
- into Var#1
- SubtractVariables 2 Var#1 Var#2 Subtract Var#2 from Var#1 and put answer
- into Var#1
- RandomVariable 2 Var# Number Set Var# to a random number between 1
- and Number
- NounToVariable 1 Var# Set Var# to value of noun
- ObjectToVariable 1 Var# Set Var# to value of object
- WinGame 0 None Player wins game at end of turn
- EndGame 0 None Game ends at end of turn
- QuitThisCMD 0 None Quit evaluating this CMD
-
- 50
-
- QuitAllCMDs 0 None Finished with all meta-commands
- DoneWithTurn 0 None All Done this turn -- get input next
- ReDirectTo 0 None See explanation that follows below.
-
-
- SPECIAL META-COMMAND SITUATIONS
-
- There are some very powerful (and potentially confusing) actions above! Some
- words of explanation and some examples are in order. Specific topics to be
- covered below are Flags, Counters, Variables, Number Input, Asking and
- Answering Questions, Opening and Closing Passageways Between Rooms, and Meta-
- command Redirection.
-
-
- FLAGS
-
- The game designer has 255 Flags at his disposal. They are turned on with the
- TurnFlagON token, turned off with the TurnFlagOFF token and toggled with the
- ToggleFlag token. They are tested with the FlagON and FlagOFF condition
- tokens. The game designer should take great care in selecting and documenting
- his use of Flags. Always, explain what each Flag stands for and what the ON
- and OFF conditions mean in comments at the beginning of the .CMD file!
- Whenever you change the condition of a Flag explain what this new condition
- stands for in the game!
-
- When the game starts, all Flags are OFF. This fact can be used to test if
- certain initial actions should be taken, such as, making sure the flashlight's
- batteries are fresh. When the game is SAVEd and RESTOREd the condition of the
- Flags, Counters and Variables is also SAVEd and RESTOREd.
-
-
- DEBUG FLAG
-
- There is a Flag number 0 which is used by AGT to toggle the debugging mode of
- meta-commands. When Flag 0 is ON then each meta-command being considered will
- be output to the screen. By giving the input command SCRIPT you can also
- route this information to the printer. This capability can be invaluable when
- you are trying to fathom a complex meta-command "bug". The best way to use
- this capability in your game is to define a custom verb like DEBUG in the verb
- synonym section of the .DAT file and then define a meta-command like:
-
- COMMAND DEBUG
- ToggleFlag 0 (* Toggles meta-command Debug mode *)
- DoneWithTurn (* Finished with this turn *)
- END_COMMAND
-
- Both the sample games CAVE and CRUSADE have this capability. Try it in one of
- those games to see how it works.
-
-
- COUNTERS
-
- There are 9 Counters (1 to 9) in AGT that can be turned ON with the
- TurnCounterON token and turned OFF with the TurnCounterOFF token. When a
- counter is ON, it is automatically incremented at each turn of the game. When
- a counter is OFF, it is set to zero and is not incremented. The condition of
- these counters can be tested using the CounterEquals, CounterGT and CounterLT
- conditional tokens. Using counters is very useful for such things as keeping
-
- 51
-
- track of the number of turns (1) a torch is lit, (2) a player has been
- underwater using an aqua-lung, or (3) a time-bomb has been ticking. The value
- of a counter can be printed in a message by using #CTR5# (to print counter
- number 5).
-
- The game designer's use of Counters should be very carefully commented in the
- .CMD file!
-
-
- VARIABLES
-
- There are 9 Variables (1 to 9) in AGT that can be set to a specific value with
- the SetVariableTo token and added to with the AddToVariable token and subtract
- from with SubtractFromVariable token. These variables can also be set to a
- random value with the RandomVariable token, and variables can be added
- together with the AddVariables, and subtracted from one another using the
- SubtractVariables token. The condition of these variables can be tested using
- the VariableEquals, VariableGT and VariableLT and VariableChance conditional
- tokens. Using variables is very useful for such things as keeping track of
- the number of times (1) a player has asked for HELP, (2) a player has crossed
- a certain rickety bridge, or (3) until a specific event happens (like the cave
- closes or the lamp's batteries go out). Other excellent uses of variables are
- to keep track of various attributes the player may have such as Strength,
- Health, Charisma, etc. The value of a variable can be printed in a message by
- using #VAR3# (to print variable number 3).
-
- As an example, the following meta-commands in the .CMD file will (1)
- initialize the flash batteries to last a total of 100 turns, (2) decrement a
- variable for every turn the light is ON, (3) issue warnings when the battery
- will last 20 turns or less, (4) "kill" the flashlight when the batteries
- finally go out, (5) turn the flashlight ON and OFF with the input commands
- LIGHT and EXTINGUISH.
-
- ; Comments
- ; Flag 1 is OFF at start of game and ON otherwise
- ; Flag 2 is OFF if the flashlight is OFF and ON if it is ON
- ; Variable 5 will count down the life of the battery
- ; Noun 200 is FlashLight in OFF condition
- ; Noun 201 is FlashLight in ON condition
- ; Noun 202 is FlashLight in DEAD condition
-
- ; ANY meta-command -- tried at each turn of game
-
- COMMAND ANY
- FlagOFF 1 (* First turn of game -- initialize Battery life *)
- SetVariableTo 5 100 (* Battery life set to 100 turns *)
- TurnFlagON 1 (* Initialization process is now over *)
- END_COMMAND
-
- COMMAND ANY
- FlagON 2 (* Flashlight is turned ON *)
- SubtractFromVariable 5 1 (* Decrement Battery life count *)
- END_COMMAND
-
-
-
-
-
-
- 52
-
- COMMAND ANY
- FlagON 2 (* Flashlight is turned ON *)
- Present 201 (* No reason to give warning unless Flashlight here *)
- VariableGT 5 0 (* At least one more turn left in batteries *)
- VariableLT 5 21 (* Only a few more turns left in batteries *)
- PrintMessage 22 (* Flashlight will last only #VAR5# more turns! *)
- VariableEquals 5 20 (* Only print next message once *)
- PrintMessage 23 (* You had better save your batteries! *)
- END_COMMAND
-
- COMMAND ANY
- FlagON 2 (* Flashlight is turned ON *)
- VariableEquals 5 0 (* The batteries are finally dead! *)
- TurnFlagOFF 2 (* Turn it off for the last time! *)
- SwapLocations 201 202 (* Swap ON Flashlight for DEAD one *)
- Present 202 (* No reason to give message unless Flashlight here *)
- PrintMessage 24 (* The Flashlight's batteries are dead!! *)
- END_COMMAND
-
- etc... for other ANY meta-commands
-
- ; Specific Vocabulary meta-command -- tried only if WORDS match
-
- COMMAND LIGHT FLASHLIGHT
- Present 200 (* OFF flashlight is present *)
- TurnFlagON 2 (* Flashlight is turned ON *)
- SwapLocations 200 201 (* Swap OFF Flashlight for ON one *)
- PrintMessage 25 (* The flashlight is ON and shining brightly! *)
- DoneWithTurn (* Finished with this turn *)
- END_COMMAND
-
- COMMAND LIGHT FLASHLIGHT
- Present 201 (* ON flashlight is present *)
- PrintMessage 26 (* The flashlight is already ON, dummy! *)
- DoneWithTurn (* Finished with this turn *)
- END_COMMAND
-
- COMMAND LIGHT FLASHLIGHT
- Present 202 (* DEAD flashlight is present *)
- PrintMessage 27 (* Sorry, but the batteries are dead! *)
- DoneWithTurn (* Finished with this turn *)
- END_COMMAND
-
- COMMAND EXTINGUISH FLASHLIGHT
- Present 201 (* ON flashlight is present *)
- TurnFlagOFF 2 (* Flashlight is turned OFF *)
- SwapLocations 200 201 (* Swap OFF Flashlight for ON one *)
- PrintMessage 28 (* The flashlight is now off! *)
- DoneWithTurn (* Finished with this turn *)
- END_COMMAND
-
- COMMAND EXTINGUISH FLASHLIGHT
- Present 200 (* OFF flashlight is present *)
- OR
- Present 202 (* DEAD flashlight is present *)
- PrintMessage 29 (* The flashlight is already OFF! *)
- DoneWithTurn (* Finished with this turn *)
- END_COMMAND
-
- 53
-
-
- Needless to say, the game designer's use of Variables should be very carefully
- commented in your .CMD file!
-
-
- NUMBER INPUT
-
- By using meta-commands it is possible to accept number input from the player
- during the course of the game and to test the number he has input. An
- example of where such a capability might be appropriate is having the player
- open a combination safe. An example of use, GetNumberInput 4 20 would cause
- the player to be prompted as follows:
-
- "What number (from 4 to 20) ? "
-
- This prompt would be repeated until the player entered a number in the correct
- range (i.e., an integer from 4 to 20). If the game designer didn't want to
- limit the input number to a specific range, both parameters should be equal.
- For example, GetNumberInput 0 0 would cause the prompt to be
-
- "What number ? "
-
- Once input, the number can be tested by using the NumberEquals, NumberGT, and
- NumberLT conditional tokens.
-
- Another way that AGT will allow number input is as the Noun or Object within
- an input command. For example, let's say the player is in an elevator and he
- needs to push a button corresponding to a floor. Commands like "PUSH 3" will
- be accepted by the AGT parser. The Noun "3" can then be assigned to a
- variable using the NounToVariable token, tested using the VariableEquals
- token, then the player would be sent to the appropriate floor. For example,
- the following series of meta-commands will enable the player to go to any one
- of four floors by giving the correct command.
-
- COMMAND PUSH ANY
- SetVariableTo 2 0 (* Set Variable #2 to 0 *)
- AtLocation 14 (* In Elevator *)
- NounToVariable 2 (* Set Variable #2 to floor number {if any} *)
- VariableEquals 2 1 (* Did player push 1? *)
- GoToRoom 21 (* Move player to 1st floor *)
- PrintMessage 121 (* The Elevator glides to #VAR2# and you exit. *)
- DoneWithTurn (* Finished with this turn *)
- END_COMMAND
-
- COMMAND PUSH ANY
- AtLocation 14 (* In Elevator *)
- VariableEquals 2 2 (* Did player push 2? *)
- GoToRoom 22 (* Move player to 2nd floor *)
- PrintMessage 121 (* The Elevator glides to #VAR2# and you exit. *)
- DoneWithTurn (* Finished with this turn *)
- END_COMMAND
-
-
-
-
-
-
-
-
- 54
-
- COMMAND PUSH ANY
- AtLocation 14 (* In Elevator *)
- VariableEquals 2 3 (* Did player push 3? *)
- GoToRoom 23 (* Move player to 3rd floor *)
- PrintMessage 121 (* The Elevator glides to #VAR2# and you exit. *)
- DoneWithTurn (* Finished with this turn *)
- END_COMMAND
-
- COMMAND PUSH ANY
- AtLocation 14 (* In Elevator *)
- VariableEquals 2 4 (* Did player push 4? *)
- GoToRoom 24 (* Move player to 4th floor *)
- PrintMessage 121 (* The Elevator glides to #VAR2# and you exit. *)
- DoneWithTurn (* Finished with this turn *)
- END_COMMAND
-
- COMMAND PUSH ANY
- AtLocation 14 (* In Elevator *)
- NOT VariableEquals 2 0 (* Did player push a number? *)
- PrintMessage 34 (* This Elevator only has four floors. *)
- DoneWithTurn (* Finished with this turn *)
- END_COMMAND
-
-
- ASKING AND ANSWERING QUESTIONS
-
- Asking and answering questions can be handled by using several meta-commands.
- For example, let's assume we want to ask the trivia question "What is the
- largest human organ?" to which the correct answer is "skin". We would specify
- the question and answer in the .DAT file as follows:
-
- QUESTION 3 WHAT IS THE LARGEST HUMAN ORGAN?
- ANSWER 3 SKIN
-
- Then the following meta-commands would ask the question and give an
- appropriate response based on whether the answer given was right or wrong:
-
- COMMAND Verb Noun or ANY
- various conditions
- AskQuestion 3 (* ask it and get answer *)
- TurnFlagON 255 (* temporary flag to test correctness of answer *)
- AnswerIsCorrect (* tests if answer is correct *)
- TurnFlagOFF 255 (* turn temporary flag off because answer right *)
- PrintMessage 29 (* Fantastic, you got it right!! *)
- PlusScore 10 (* Give player 10 points for correct answer *)
- DoneWithTurn
- END_COMMAND
-
- COMMAND Same Verb Noun or ANY
- FlagON 255 (* temporary flag not turned off in previous COMMAND *)
- TurnFlagOFF 255 (* turn temporary flag off now *)
- PrintMessage 30 (* Sorry, you got it wrong!! *)
- DoneWithTurn
- END_COMMAND
-
- When a question is asked and a response is given, the correct answer is
- matched against the response by looking for the answer anywhere in the
- response. This means that any of the following responses would be considered
-
- 55
-
- correct by AGT:
-
- SKIN
- I THINK THE ANSWER IS SKIN
- THE CORRECT RESPONSE IS "SKIN"
- ANYONE KNOWS IT IS SKIN, YOU TURKEY COMPUTER!
-
- The game designer can have up to 9 sets of questions and answers (1 to 9) in
- the .DAT file. They could form the basis for a series of riddles that must be
- answered during the course of the adventure in order to get all the points and
- win the game.
-
-
- OPENING AND CLOSING PASSAGEWAYS BETWEEN ROOMS
-
- The ChangePassageway token can be used in a meta-command to open or close
- passageways between rooms during the game. For example, to open a secret
- passage between room 3 and room 7 when the command SESAME is given could be
- done with the following:
-
- COMMAND SESAME
- AtLocation 3 (* Player is at location 3 *)
- InRoom 203 (* Solid stone wall *)
- ChangePassageway 2 7 (* open passage South(2) to room 7 *)
- SwapLocations 203 204 (* Swap solid wall for wall with door in it *)
- SwapLocations 227 228 (* Swap for wall with door in room 7 also *)
- PrintMessage 21 (* At the sound of your voice, a large doorway *)
- (* magically appears where a stone wall once was. *)
- DoneWithTurn
- END_COMMAND
-
- Once this meta-command has opened the passageway between these rooms, the
- player could go to room 7 from room 3 by giving the SOUTH, or conversely go to
- room 3 from room 7 by giving the command NORTH. The passageway is opened in
- both rooms in opposite directions.
-
- The same token can be used to close a passageway as well. For example, if the
- statue in the treasure room was "booby-trapped", a command of GET STATUE might
- cause an avalanche of rocks to close the west exit from the treasure room as
- follows:
-
-
- COMMAND GET STATUE
- AtLocation 23 (* Player is in the Treasure room *)
- InRoom 245 (* statue *)
- FlagOFF 3 (* Booby trap has not been tripped (yet) if OFF *)
- TurnFlagON 3 (* It has now been tripped *)
- ChangePassageway 4 0 (* close(0) passageway to the West(4) *)
- SwapLocations 211 212 (* Swap doorway with jumble of rocks *)
- SwapLocations 213 214 (* Put jumble of rocks in other room also *)
- PrintMessage 25 (* As you pick up the statue, a lever underneath *)
- (* pops up. There is a terrible crash and an *)
- (* avalanche of rocks buries the doorway!! *)
- GetIt 245 (* You wanted it -- You got it!! *)
- DoneWithTurn
- END_COMMAND
-
- The numbers corresponding to the various directions are as follows:
-
- 56
-
-
- 1 - North 5 - NorthEast 9 - Up
- 2 - South 6 - NorthWest 10 - Down
- 3 - East 7 - SouthEast 11 - Enter
- 4 - West 8 - SouthWest 12 - Exit
-
-
- META-COMMAND REDIRECTION
-
- Meta-commands can be redirected to other meta-commands. The principal use of
- this capability is when there are several player input commands which should
- be handled by the game in the same way. For example, in the CAVE adventure,
- we want the same series of meta-commands to be used if the player enters
- "WATER THE PLANT" or "POUR WATER ON THE PLANT". With meta-command
- redirection, the series of meta-commands we wish to use needs to be given only
- once in the .CMD file. The second use can be simply redirected to the first.
- For example, let's assume that all of the necessary meta-commands are given
- completely for POUR WATER ON PLANT, then the appropriate redirection for WATER
- PLANT could be accomplished by the following lines in the .CMD file:
-
- COMMAND WATER PLANT
- ReDirectTo POUR WATER ON PLANT
- END_COMMAND
-
- Notice in the above example that we redirected the meta-command for a fixed
- input command (WATER PLANT) to another fixed command (POUR WATER ON PLANT).
- It is also possible to redirect meta-commands for ANY words. For example, if
- we wished to redirect the meta-command WATER ANY we could do it with the
- following:
-
- COMMAND WATER ANY
- ReDirectTo POUR WATER ON $NOUN$
- END_COMMAND
-
- Notice that by using $NOUN$ in the "redirected" command, we can "map" the
- original command's noun (from WATER PLANT or WATER TREE, or WATER whatever) to
- the new command's object. This redirected command causes the game to convert
- a command to "WATER THING" to act as if the player had actually typed in "POUR
- WATER ON THING". In addition to $NOUN$, it is also possible to use $VERB$,
- $NAME$ and $OBJECT$ whenever we wish to "map" these words into another use
- within a redirected command. You should not use ANY in the redirected
- command, i.e., ReDirectTo POUR WATER ON ANY would make AGT think the player
- had actually typed in "POUR WATER ON ANY".
-
-
- ORGANIZATION OF THE .CMD FILE
-
- Meta-commands like those described above are processed sequentially by their
- order of appearance in the .CMD file. As a result, the COMMAND's order is
- very important! For example, let's consider a series of meta-commands to
- define a new verb FILL. We want to be able to fill a bottle with water or oil
- depending upon where we are. We want to break a vase, whenever we try to fill
- the vase. Finally, we want to print several default messages, such as "The
- bottle is already full.", or "The $NOUN$ isn't here, so you can't $VERB$
- it!", or "There is nothing here to put in the $NOUN$." or "You have to be
- kidding! You can't $VERB$ a $NOUN$!!" This can be done with the following
- seven meta-commands for the verb FILL:
-
-
- 57
-
- ; COMMENTS
- ;
- ; FLAGS:
- ; 2 Bottle is full if ON, empty if OFF
- ;
- ; NOUNS:
- ; 225 bottle filled with water
- ; 226 empty bottle
- ; 227 bottle filled with oil
- ; 265 broken vase -- pottery shards
- ; 263 Ming vase
-
-
- (1) COMMAND FILL ANY
- NOT NOUNPresent
- PrintMessage 29 ;The $NOUN$ isn't here, so you can't $VERB$ it!
- DoneWithTurn
- END_COMMAND
-
- (2) COMMAND FILL BOTTLE
- FlagON 2 ;bottle is already full
- PrintMessage 105 ;The bottle is already full.
- DoneWithTurn
- END_COMMAND
-
- (3) COMMAND FILL BOTTLE
- AtLocation 3 ;inside building
- OR
- AtLocation 4 ;valley by stream
- OR
- AtLocation 38 ;bottom of pit with stream
- OR
- AtLocation 95 ;cavern with waterfall
- OR
- AtLocation 113 ;reservoir
- OR
- AtLocation 141 ;by building
- PrintMessage 107 ;bottle is now full of water
- SwapLocations 226 225 ;swap empty bottle for water-filled
- TurnFlagON 2 ;bottle is now full
- DoneWithTurn
- END_COMMAND
-
- (4) COMMAND FILL BOTTLE
- AtLocation 24 ;east pit of two-pit room
- PrintMessage 108 ;bottle is now full of oil
- SwapLocations 226 227 ;swap empty bottle for oil-filled
- TurnFlagON 2 ;bottle is now full
- DoneWithTurn
- END_COMMAND
-
- (5) COMMAND FILL BOTTLE
- PrintMessage 106 ;There is nothing here to put in the $NOUN$.
- DoneWithTurn
- END_COMMAND
-
-
-
-
- 58
-
- (6) COMMAND FILL VASE
- Destroy 263 ;Ming vase
- PutInCurrentRoom 265 ;broken vase pottery shards
- PrintMessage 145 ;You clumsy oaf! You broke the vase.
- DoneWithTurn
- END_COMMAND
-
- (7) COMMAND FILL ANY
- PrintMessage 109 ;You must be kidding! You can't $VERB$ a $NOUN$!
- DoneWithTurn
- END_COMMAND
-
-
- The numbers shown in front of each of the COMMAND's are just for ease of this
- discussion. Numbers like these should NEVER actually be included in a .CMD
- file, because they would lead to serious bugs!
-
- If these COMMAND's were in the .CMD file in the order shown, when the player
- entered a command to "FILL something", AGT would first try COMMAND (1) which
- would test whether the "something" was present. If it was not present,
- COMMAND (1) would print the default message "The something isn't here, so you
- can't fill it!" and the DoneWithTurn would cause all AGT process to cease for
- this turn. Only if the something was present, would AGT try COMMANDS (2),
- (3), etc.
-
- COMMAND (2) to (5) will only be tried in the "something" was the BOTTLE.
- COMMAND (2) would be tried first, and it would test if the bottle was already
- full and give an appropriate message if it was full. COMMAND (3), which would
- only be tried if the bottle was empty, would test if the player was located in
- places where it was possible to get water, and fills the bottle with water if
- possible. COMMAND (4), which would only be tried if there was no water at the
- current location, would test if the player was at location 24, where there is
- oil, and fill the bottle with oil, if possible. COMMAND (5) would only be
- tired if the player was not located near a source of water or a source of oil
- and it would print a message that "There is nothing here to put in the
- bottle".
-
- COMMAND (6) only works if the player's input is FILL VASE. Because AGT got
- past COMMAND (1), we know that the vase is present (other wise COMMAND (1)
- would have caused an "error" message to be printed). COMMAND (6) causes the
- broken pottery shards to be switched with the vase and an appropriate message
- to be printed.
-
- COMMAND (7) is the "default" condition for the verb FILL. It is activated
- only if the player gave the input "FILL something" and the "something" is
- present, but it is not the BOTTLE or the VASE. For example, if the player
- entered FILL THE ROCK, COMMAND (7) would cause "You must be kidding! You can't
- fill a rock!" to be printed.
-
- The order of these COMMAND's is very important! Specifically, COMMAND (1)
- must be first and COMMAND (7) must be last in order for AGT to give the
- "correct" and logical default responses to the verb FILL. Further, COMMAND
- (2) must precede and COMMAND (5) must follow COMMAND's (3) and (4) in order
- for the input "FILL BOTTLE" to work logically. It is important to understand
- why the above sequence is critical. Study the sequence again, if necessary.
-
- Besides, the order of COMMAND's for a specific verb (like FILL), it is also
- important to arrange the verbs within the .CMD file in a reasonable manner.
-
- 59
-
- Specifically, all the meta-commands for each verb should be grouped together
- in the .CMD file. For example:
-
- ; ANY Commands
-
- (1) COMMAND ANY
- .
- .
- (37) COMMAND ANY
-
- ; READ Commands
-
- (38) COMMAND READ BOOK
- .
- .
- (46) COMMAND READ ANY
-
- ; SEARCH Commands
-
- (47) COMMAND SEARCH CLOSET
- .
- .
- (54) COMMAND SEARCH ANY
-
- ; CLIMB Commands
-
- (55) COMMAND CLIMB ROPE
- .
- .
- (69) COMMAND CLIMB ANY
-
- ; SQUEEZE Commands
-
- (70) COMMAND SQUEEZE LEMON
- .
- .
- (82) COMMAND SQUEEZE ANY
- .
- .
-
- All the ANY meta-commands are grouped together; all the READ meta-commands are
- together, etc. Not only is this easier to follow and debug, but it is faster
- for AGT to process. This is because, AGT processes these meta-commands using
- a variation of a technique called "Indexed Sequential Access Method" (also
- called ISAM). What this means is: AGT keeps track of the first and last
- meta-commands for each verb. For example, if the verb was CLIMB, AGT would
- only consider meta-commands with indices from 55 to 69. But within this
- group, AGT considers them sequentially.
-
-
-
-
-
-
-
-
-
-
-
- 60
-
- PART 4: SAMPLE AGT META-COMMAND SCENARIOS
-
-
- This Part of the manual presents several scenarios where meta-language
- commands have been used to create typical game situations. These scenarios
- are presented in detail by showing how ROOMs, NOUNs and CREATUREs data are
- used in the .DAT file, how messages are put in the .MSG file, and finally how
- the meta-commands are written to accomplish the desired effects in the .CMD
- file. The specific scenarios to be presented include: (1) defining the
- actions for the new verb FILL, (2) a variety of random activities by a castle
- guard, and (3) interaction with characters in a Star Trek adventure.
-
-
- SCENARIO 1: "FIND" VERB ACTIONS
-
- This scenario comes from the COLOSSAL CAVE adventure. In this scenario, we
- want to define several actions/responses to the player's input using the
- custom user-defined verb "FIND". Pay particular attention to how the player
- is offered a hint (for 5 points) if he inputs "FIND CAVE".
-
- In the CAVE.DAT file we would define a custom verb as:
-
- VERB
- Dummy_Verb1 FIND
- END_VERB
-
- Several messages are needed in the CAVE.MSG file as follows:
-
- MESSAGE 24
- You are already carrying the $NOUN$, dummy!
- END_MESSAGE
-
- MESSAGE 57
- I don't know where the cave is, but hereabouts no stream
- can run on the surface for very long. I would try the stream.
- END_MESSAGE
-
- MESSAGE 59
- I can only tell you what you see as you move about and
- manipulate things. I cannot tell you where remote things are.
- END_MESSAGE
-
- MESSAGE 86
- Okay, If you're so smart, do it yourself!
- END_MESSAGE
-
- MESSAGE 94
- I believe what you want is right here with you.
- END_MESSAGE
-
- MESSAGE 116
- The Dwarf's knife vanished as it struck the wall of the cave.
- END_MESSAGE
-
- MESSAGE 138
- I daresay whatever you want is around here somewhere.
- END_MESSAGE
-
-
- 61
-
- MESSAGE 143
- The hint will cost you 5 points.
- END_MESSAGE
-
- MESSAGE 175
- Do you want the hint?
- END_MESSAGE
-
- The meta-commands for FIND in the CAVE.CMD file would be as follows:
- (Be sure and understand the importance of the order of these COMMANDs.)
-
- ;FLAGS
- ;Flag 3 Cave is closed if ON and player is in a room with many sleeping
- ; dwarves -- who should not be awakened!
- ;Flag 9 Temporary flag
- ;Flag 10 A Dwarf is in the room if ON
- ;Flag 12 Hint about how to find cave has been offered if ON
-
- ; FIND meta-commands
-
- COMMAND FIND KNIFE
- PrintMessage 116 ;The dwarf's knife vanished.
- DoneWithTurn
- END_COMMAND
-
- COMMAND FIND ANY
- NOUNIsCarrying
- PrintMessage 24 ;You already have it, dummy!
- DoneWithTurn
- END_COMMAND
-
- COMMAND FIND ANY
- FlagON 3 ;cave is closed
- OR
- NOUNPresent ;NOUN is here already
- PrintMessage 138 ;It must be around here somewhere.
- DoneWithTurn
- END_COMMAND
-
- COMMAND FIND DWARF
- FlagON 10 ;dwarf in room
- PrintMessage 94 ;It is here with you.
- DoneWithTurn
- END_COMMAND
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 62
-
- COMMAND FIND CAVE
- FlagOFF 12 ;The Cave hint has not been offered yet.
- TurnFlagON 12 ;Now Cave hint has been offered
- PrintMessage 175 ;Do you want a hint?
- PromptForYes
- TurnFlagON 9 ;hint has been rejected - so far (Turn Temporary Flag ON)
- PrintMessage 143 ;The hint will cost your 5 points
- PrintMessage 1 ;Is that OK?
- PromptForYes
- TurnFlagOFF 9 ;Offer of hint has been accepted (Turn Temporary Flag OFF)
- PrintMessage 57 ;Follow the stream to find the cave.
- MinusScore 5 ;hint costs 5 points
- DoneWithTurn
- END_COMMAND
-
- COMMAND FIND CAVE
- FlagON 9 ;Offer of hint was rejected
- ;(Temporary Flag was not turned OFF in last COMMAND)
- TurnFlagOFF 9 ;Turn temporary Flag OFF now
- PrintMessage 86 ;OK, if you're so smart - do it yourself!
- DoneWithTurn
- END_COMMAND
-
- COMMAND FIND ANY
- PrintMessage 59 ;Sorry, I can't tell you where remote things are.
- ; Default message for FIND
- DoneWithTurn
- END_COMMAND
-
-
- SCENARIO 2: RANDOM ACTIVITIES BY GUARD
-
- This is a modification of a scenario from CRUSADE adventure. In this scenario
- we want to create a number of encounters with guards in various rooms of the
- Baron's castle. We will use only one CREATURE (Guard -- 301) and move him
- around from room to room randomly. The player can fight the guard, and will
- be thrown into a dungeon cell if he loses, and will cause the guard to be
- replaced with an unconscious guard if he wins. The player can wear a disguise
- by wearing the Baron's armor. If the guard encounters the player wearing the
- armor, the guard will mistake the player for the Baron and leave the room. If
- the player attempts to talk to the guard without giving the proper password,
- the guard will capture the player and throw him into the dungeon. If the
- player angers the guard in Room 11 (a small room -- high up in the sheer wall
- of the cavern), the guard will throw the player down to the cavern floor far
- below where the player will lose consciousness and later awake with a broken
- leg. The leg will take a random number of turns to heal. Before it heals,
- the player will be unable to move around.
-
- To give as complete a picture as possible, the needed data for this scenario
- will be shown from all three necessary CRUSADE.* files: i.e., CRUSADE.DAT,
- CRUSADE.MSG and CRUSADE.CMD. In CRUSADE.DAT we would define the CREATURE,
- ROOMs and the various NOUNs needed as:
-
- CREATURE 301
- guard
- Baron's
- You see one of the Baron's guards. He looks very angry.
- LOCATION 11
-
- 63
-
- HOSTILE
- MAN
- END_CREATURE
-
- CREATURE_DESCR 301
- The guard is about 6 foot 8 inches tall, but he appears even bigger
- as he looms over you. He looks mean and is rather ugly.
- END_CREATURE_DESCR
-
- ROOM 10
- Large cavern
- EAST 9
- LIGHT 210 (* Blazing torch *)
- END_ROOM
-
- ROOM_DESCR 10
- You are in a very large cavern with high sheer walls. A passage
- leads off to the east.
- END_ROOM_DESCR
-
- NOUN 269
- walls
- cavern
- The cavern walls are quite steep. You can't see any way to climb them.
- LOCATION 10
- UNMOVABLE
- NOUN_SYNONYMS WALL
- PLURAL
- END_NOUN
-
- NOUN_DESCR 269
- The walls are very steep and quite smooth. You can't see any
- hand or foot holds.
- END_NOUN_DESCR
-
- NOUN 219
- opening
- small
- There is an opening in the wall -- high up near the roof of the cavern.
- LOCATION 10
- UNMOVABLE
- END_NOUN
-
- NOUN_DESCR 219
- You see a dim light shining out of the opening, but it is
- too high and far to see more. It looks impossible to get up to
- the opening from your location at the bottom of the cavern.
- END_NOUN_DESCR
-
- ROOM 11
- Small room
- SOUTH 42
- LIGHT 210 (* Blazing torch *)
- END_ROOM
-
- ROOM_DESCR 11
- You are in a small room carved into the sheer cavern wall.
- The south part of the room is totally open and looks out
-
- 64
-
- on to the cavern floor far below. Be careful not to go south!
- There is a doorway to the north.
- END_ROOM_DESCR
-
- NOUN 215
- leg
- broken
- You have a broken leg and are unable to move.
- LOCATION 0
- UNMOVABLE
- END_NOUN
-
- NOUN_DESCR 215
- Your leg hurts like the dickens! You are quite discouraged because you
- will need two good legs to rescue the princess and solve this adventure!
- END_NOUN_DESCR
-
- NOUN 230
- armor
- silver
- The Baron's silver suit of armor stands nearby.
- LOCATION 24
- WEIGHT 25
- SIZE 25
- WEARABLE
- POINTS 10
- END_NOUN
-
- NOUN_DESCR 230
- The armor is quite fancy, but it still looks like it would be useful
- in a fight. It would cover its occupant from head to foot.
- END_NOUN_DESCR
-
- NOUN 259
- guard
- unconscious
- An unconscious guard lies at your feet.
- LOCATION 0
- WEIGHT 200
- END_NOUN
-
- NOUN_DESCR 259
- The guard's unconscious body lies in a heap at your feet.
- You have to step over him as you move about the passageway.
- He looks like he will be out of action for a long time.
- END_NOUN_DESCR
-
- ROOM 17
- Guard's quarters
- EAST 16
- END_ROOM
-
- ROOM_DESCR 17
- You are in the guard's quarters. It looks like a pig sty -- it is so
- messy. The door is to the east.
- END_ROOM_DESCR
-
- HELP 17
-
- 65
-
- Leave quickly. It is very dangerous to linger here!
- END_HELP
-
- ROOM 41
- Cell
- (* No obvious exits *)
- END_ROOM
-
- ROOM_DESCR 41
- You are in a dingy dungeon cell. There is straw on the floor. The cell
- is cold and damp. You are very depressed by just being here.
- END_ROOM_DESCR
-
- In the CRUSADE.MSG file we would define these needed messages:
-
- MESSAGE 3
- The guard looks at you suspiciously because you neglected to
- identify yourself by using the proper password. He knows you
- shouldn't be here and decides that he should take you to the
- Baron for questioning. He rushes toward you.
- END_MESSAGE
-
- MESSAGE 8
- What a great idea! You must have played this game before, but
- unfortunately you can't do that now. It is still a good idea
- and you may wish to try it some other time. But now it is impossible
- END_MESSAGE
-
- MESSAGE 25
- because the guard simply won't let you $VERB$ the $NOUN$.
- END_MESSAGE
-
- MESSAGE 33
- An angry-looking guard suddenly enters the room. He eyes you
- suspiciously and begins to move quickly and carefully toward you.
- He reaches for his sword, but pauses as if he is waiting for you
- to make the first move.
- END_MESSAGE
-
- MESSAGE 42
- The guard gets mad at you because he knows you aren't allowed here.
- He picks you up and throws you over the edge to the cavern floor far below.
- He stands at the edge looking down at you and laughingly cries, "Stay out!
- If you know what is good for you. Next time, I will get rough!"
- He laughs again and that is the last thing you remember as you drift off
- into unconsciousness.
-
- When you awake, you find...
- END_MESSAGE
-
- MESSAGE 43
- with a broken leg.
- END_MESSAGE
-
- MESSAGE 44
- Your leg has finally healed. You are now free to resume your quest.
- END_MESSAGE
-
-
- 66
-
- MESSAGE 45
- The guard looks you over very carefully, but because you are wearing the
- Baron's armor, the guard mistakes you for the Baron. "Sorry to disturb
- you, my Lord!", he says as he quickly leaves the room.
- END_MESSAGE
-
- MESSAGE 49
- The guard grabs your throat with his big hands. He squeezes until you can
- barely breathe. You struggle and try to pull his hands away.
- END_MESSAGE
-
- MESSAGE 50
- Finally, you slip into unconsciousness. When you awake you find
- yourself in a strange and ugly little room.
- END_MESSAGE
-
- MESSAGE 51
- At last, you pry his fingers off your wind pipe. Now able to breathe,
- you get enough strength to slam your elbow into his gut. He lets
- go of you and doubles over. You kick him in a very vulnerable
- part of his anatomy and he crumples in a pile on the floor.
- END_MESSAGE
-
- In the CRUSADE.CMD we would have several COMMANDs. First, the meta-commands
- that cause the random events related to the guard:
-
- COMMAND ANY
- NOT InRoom 301 (* Guard *)
- NOT InRoom 259 (* Unconscious Guard *)
- Destroy 301 (* Guard disappears from room after player leaves room *)
- Destroy 259 (* Unconscious Guard's body disappears from room *)
- END_COMMAND
-
- COMMAND ANY
- Chance 5 (* 5 % chance of guard appearing *)
- AtLocationGT 10 (* Baron's castle area *)
- NOT InRoom 301 (* Guard *)
- NOT InRoom 259 (* Unconscious Guard *)
- PutInCurrentRoom 301 (* Put guard in room *)
- PrintMessage 33 (* Guard suddenly appears *)
- BlankLine
- END_COMMAND
-
- COMMAND ANY
- Chance 50 (* 50 % chance of guard appearing in his own quarters *)
- AtLocation 17 (* Guard's quarters *)
- NOT InRoom 301 (* Guard *)
- NOT InRoom 259 (* Unconscious Guard *)
- PutInCurrentRoom 301 (* Put guard in room *)
- PrintMessage 33 (* Guard suddenly appears *)
- BlankLine
- END_COMMAND
-
-
-
-
-
-
-
- 67
-
- COMMAND ANY
- InRoom 301 (* guard *)
- IsWearing 230 (* Baron's Armor *)
- PrintMessage 45 (* Guard thinks you are the Baron and leaves *)
- Destroy 301 (* Guard disappears *)
- END_COMMAND
-
- COMMAND ANY
- Chance 25
- AtLocation 11 (* room in wall *)
- InRoom 301 (* Guard *)
- GetIt 215 (* give broken leg to player *)
- GoToRoom 10 (* guard throws you into room 10 *)
- PrintMessage 42
- DoneWithTurn (* no further action -- get next input *)
- END_COMMAND
-
- Now the meta-commands dealing with the broken leg:
-
- COMMAND ANY
- IsCarrying 215 (* Broken leg *)
- VerbIsDirection (* Trying to move *)
- PrintMessage 8 (* Sorry, but you can't *)
- PrintMessage 43 (* with a broken leg *)
- DoneWithTurn (* no further action -- get next input *)
- END_COMMAND
-
- COMMAND ANY
- Chance 20
- IsCarrying 215 (* Broken leg *)
- PrintMessage 44 (* Leg is healed *)
- BlankLine
- Destroy 215 (* get rid of broken leg *)
- END_COMMAND
-
- Now the meta-commands corresponding to specific input from the player:
-
- COMMAND GET ANY
- InRoom 301 (* angry guard *)
- PrintMessage 8 (* Sorry, you can't *)
- PrintMessage 25 (* Guard won't allow it *)
- DoneWithTurn (* no further action -- get next input *)
- END_COMMAND
-
- COMMAND GET ANY
- IsCarrying 215 (* Broken leg *)
- PrintMessage 8 (* Sorry, you can't *)
- PrintMessage 43 (* with broken leg *)
- DoneWithTurn (* no further action -- get next input *)
- END_COMMAND
-
- COMMAND OPEN ANY
- InRoom 301 (* angry guard *)
- PrintMessage 8 (* Sorry, you can't *)
- PrintMessage 25 (* Guard won't allow it *)
- DoneWithTurn (* no further action -- get next input *)
- END_COMMAND
-
-
- 68
-
- COMMAND ATTACK GUARD
- InRoom 301 (* angry guard *)
- PrintMessage 49 (* It was a fierce fight *)
- TurnFlagON 255 (* Set Temporary Flag to ON *)
- Chance 25 (* 25 % chance of winning fight *)
- PrintMessage 51 (* but you won! *)
- TurnFlagOFF 255 (* Turn Temporary Flag OFF now *)
- SwapLocations 259 301 (* put unconscious guard in room *)
- DoneWithTurn (* no further action -- get next input *)
- END_COMMAND
-
- COMMAND ATTACK GUARD
- InRoom 301 (* angry guard *)
- FlagON 255 (* Temporary Flag was not turned OFF in last COMMAND *)
- TurnFlagOFF 255 (* Turn Temporary Flag OFF now *)
- PrintMessage 50 (* but you lost! *)
- SendAllToRoom 17 (* Guard's takes stuff to his quarters *)
- GoToRoom 41 (* Guard puts you in dungeon cell *)
- SendToRoom 202 41 (* Put torch in dungeon with you *)
- DoneWithTurn (* no further action -- get next input *)
- END_COMMAND
-
- COMMAND TALK TO GUARD
- PrintMessage 3 (* chat with guard -- without using password *)
- PrintMessage 49 (* It was a fierce fight *)
- PrintMessage 50 (* but you lost! *)
- SendAllToRoom 17 (* Guard's takes stuff to his quarters *)
- GoToRoom 41 (* Guard puts you in dungeon cell *)
- SendToRoom 202 41 (* Put torch in dungeon with you *)
- DoneWithTurn (* no further action -- get next input *)
- END_COMMAND
-
- COMMAND ASK GUARD ABOUT ANY
- ReDirectTo TALK TO GUARD
- END_COMMAND
-
-
- SCENARIO 3: INTERACTION WITH CHARACTERS
-
- Let's develop an example of communicating with other characters in an
- adventure game. Specifically, let's consider a situation in a Star Trek
- adventure game were we wish to be able to experience the following interchange
- between several of the standard Star Trek characters and the player, who is
- playing the role of Captain James T. Kirk:
-
- You are on the Bridge, the circular room at the top of the Enterprise's
- disk. The walls are decked with crew members seated or standing at their
- posts. In the center of the room is your command chair. Along one side of
- the room is a large viewscreen. The only exit, via turbolift, is aft.
- The viewscreen shows the emptiness and vastness of space.
- Spock stands alert but relaxed, with his arms folded behind his back.
- Chekov sits behind the weapons control console.
- Lieutenant Uhura listens intently to her earphones.
- At the navigator's station, Sulu sits behind a console of controls.
-
- What now? AFT
-
-
-
- 69
-
- You are in the TurboLift, a small closet-like room. The Bridge is to your
- west.
- Spock stands alert but relaxed, with his arms folded behind his back.
-
- What now? WARP 10
-
- Spock: Jim, surely you realize that you are not on the Enterprise's
- Bridge. The command "warp 10" is quite inappropriate here.
-
- What now? WEST
-
- You are on the Bridge, the circular room at the top of the Enterprise's
- disk. The walls are decked with crew members seated or standing at their
- posts. In the center of the room is your command chair. Along one side of
- the room is a large viewscreen. The only exit, via turbolift, is aft.
- The viewscreen shows the emptiness and vastness of space.
- Spock stands alert but relaxed, with his arms folded behind his back.
- Chekov sits behind the weapons control console.
- Lieutenant Uhura listens intently to her earphones.
- At the navigator's station, Sulu sits behind a console of controls.
-
- What now? SCOTTY, WARP 10
-
- Spock: Captain, should you have Doctor McCoy check your eye sight?
- Surely, you can see that Scotty isn't here.
-
- What now? CHEKOV, WARP 10
-
- Spock: Your extensive command experience should have convinced you that
- better results can be obtained when the appropriate member of the crew
- performs this operation. Permit me to redirection your command to the
- proper crew member.
-
- Spock: Sulu, warp 10
-
- Sulu: What course should I plot first, Captain?.
-
- What now? PLOT A COURSE FOR QWERTY
-
- Sulu: Plotting a course for the planet Qwerty, Captain.
-
- What now? WARP 16
-
- Spock: Captain, surely you realize that the Enterprise is only capable of
- Warp 1 through Warp 12, plus Impulse power, of course.
-
- What now? WARP 10
-
- Sulu: Going to warp factor 10.
-
- To see how this scene is achieved, first let's examine the relevant entries
- in the .DAT file. There are only two Rooms in the scene, the Bridge and the
- TurboLift; their descriptions are as follows:
-
-
-
-
-
-
- 70
-
- ROOM 114
- Bridge
- EAST 2
- ENTER 2
- EXIT 2
- END_ROOM
-
- ROOM_DESCR 114
- You are on the Bridge, the circular room at the top of the Enterprise's
- disk. The walls are decked with crew members seated or standing at their
- posts. In the center of the room is your command chair. Along one side of
- the room is a large viewscreen. The only exit, via turbolift, is aft.
- END_ROOM_DESCR
-
- ROOM 2
- Turbolift: Deck 1
- WEST 114 (* Bridge *)
- ENTER 114 (* Bridge *)
- EXIT 114 (* Bridge *)
- END_ROOM
-
- ROOM_DESCR 2
- You are in the TurboLift, a small closet-like room. The Bridge is to your
- west.
- END_ROOM_DESCR
-
- Next, let's see how the Nouns are described in the .DAT file:
-
- NOUN 201
- course
- ship's
- You see the course plotted on the navigator's console.
- LOCATION 0
- NOUN_SYNONYMS CONSOLE
- END_NOUN
-
- NOUN_DESCR 201
- The navigator's console shows the ship's course plotted in light blue.
- The Enterprise (shown as a red circle) is on course.
- END_NOUN_DESCR
-
- NOUN 243
- Viewscreen
- Big
- The viewscreen shows the emptiness and vastness of space.
- LOCATION 114 (* Bridge *)
- UNMOVABLE
- NOUN_SYNONYMS SCREEN
- END_NOUN
-
- NOUN 246
- Qwerty
- First
- You notice on the viewscreen: The planet Qwerty below.
- LOCATION 0
- UNMOVABLE
- NOUN_SYNONYMS PLANET
- END_NOUN
-
- 71
-
-
- Notice that only the Viewscreen, Noun 243, is in the Bridge, Room 114, at the
- beginning of the scene. The other Nouns are initially "nowhere", Room 0, and
- will be put in Room 114, the Bridge, when appropriate. Specifically, The
- Ship's Course, Noun 201, will be put in Room 114 as soon as a command is given
- to plot a course. Similarly, Noun 246, the planet Qwerty -- shown in the
- Viewscreen, will replace the empty Viewscreen when the Enterprise gets close
- to the planet and assumes orbit.
-
- There are a number of Creatures in the scene. Their descriptions might be
- given in the .DAT file as follows:
-
- CREATURE 300
- Spock
- Commander
- Spock stands alert but relaxed, with his arms folded behind his back.
- LOCATION 114 (* Bridge *)
- GROUPMEMBER (* Have Spock automatically follow player *)
- END_CREATURE
-
- CREATURE_DESCR 300
- Spock is the only Vulcan member of your crew. He wears a blue shirt with
- a gold Star Fleet insignia.
- END_CREATURE_DESCR
-
- CREATURE 301
- Chekov
- Lieutenant
- Chekov sits behind the weapons control console.
- LOCATION 114 (* Bridge *)
- END_CREATURE
-
- CREATURE_DESCR 301
- Chekov is sitting at his assigned station pressing keys on the weapons
- control panel and monitoring the screen in front of him.
- END_CREATURE_DESCR
-
- CREATURE 302
- Uhura
- Lieutenant
- Lieutenant Uhura listens intently to her earphones.
- LOCATION 114 (* Bridge *)
- UNMOVABLE
- END_CREATURE
-
- CREATURE_DESCR 302
- Uhura is sitting in her communications station listening to her earphones
- and monitoring all of the known hailing frequencies.
- END_CREATURE_DESCR
-
- CREATURE 303
- Sulu
- Commander
- At the navigator's station, Sulu sits behind a console of controls.
- LOCATION 114 (* Bridge *)
- UNMOVABLE
- END_CREATURE
-
-
- 72
-
- CREATURE_DESCR 303
- Sulu is sitting next to Chekov, monitoring lit navigation console.
- END_CREATURE_DESCR
-
- CREATURE 305
- Scott
- Commander
- Commander Scott sits at his console, monitoring the ship's engines.
- LOCATION 52 (* Engine Room *)
- UNMOVABLE
- CREATURE_SYNONYMS SCOTTY
- END_CREATURE
-
- CREATURE_DESCR 305
- Scott is the best Engineering Officer in the Federation.
- END_CREATURE_DESCR
-
- All of these Creatures are initially in the Bridge, Room 114, except for
- Commander Scott, who is in the Engine Room, naturally.
-
- Only one other entry from the .DAT file needs to be specified in order for the
- scene to work as show, and that is the definition of verbs:
-
- VERB
- EAST AFT
- Dummy_Verb1 WARP
- Dummy_Verb2 PLOT SET CHART
- END_VERB
-
- Notice that AFT is defined as a synonym for EAST. WARP is defined as a
- "custom" verb so that commands like WARP 9 will be understood by the parser
- and the rest of the AGT driver program (RUN.EXE). Integer numbers like 9, 12,
- etc., are always acceptable "Nouns" to the parser; however, you must use
- meta-commands to deal with numbers as Nouns properly. PLOT, SET and CHART are
- all synonyms so that the player can enter PLOT A COURSE, or SET A COURSE or
- CHART A COURSE and they will all be treated the same by AGT.
-
- The messages needed for the scene are contained in the .MSG file and are
- shown below:
-
- MESSAGE 105
- Spock: Captain, should you have Doctor McCoy check your eye sight?
- Surely, you can see that $NAME$ isn't here.
- END_MESSAGE
-
- MESSAGE 106
- Spock: Your extensive command experience should have convinced you that
- better results can be obtained when the appropriate member of the crew
- performs this operation. Permit me to redirection your command to the
- proper crew member.
- END_MESSAGE
-
- MESSAGE 107
- Spock: Sulu, $VERB$ $NOUN$.
-
- END_MESSAGE
-
-
-
- 73
-
- MESSAGE 108
- Spock: Jim, surely you realize that you are not on the Enterprise's
- Bridge. The command "$VERB$ $NOUN$" is quite inappropriate here.
- END_MESSAGE
-
- MESSAGE 109
- Spock: Captain, surely you realize that the Enterprise is only capable of
- Warp 1 through Warp 12, plus Impulse power, of course.
- END_MESSAGE
-
- MESSAGE 110
- Sulu: What course should I plot first, Captain?.
- END_MESSAGE
-
- MESSAGE 111
- Sulu: Going to warp factor $NOUN$.
- END_MESSAGE
-
- MESSAGE 112
- Sulu: Plotting a course for the planet $OBJECT$, Captain.
- END_MESSAGE
-
- Now for the heart of the scene's interaction, the .CMD file meta-commands.
- First, any input command that the player addresses to a valid Creature in the
- game will first be tried against a group of meta-commands that are addressed
- to ANYBODY. This will happen automatically. For example, consider the
- following ANYBODY meta-commands:
-
- COMMAND ANYBODY, ANY
- NOT NamePresent (* Addressee isn't here. *)
- PrintMessage 105 (* Sorry, but $NAME$ doesn't seem to be here. *)
- DoneWithTurn
- END_COMMAND
-
- COMMAND ANYBODY, WARP ANY
- AtLocation 114 (* On Enterprise's Bridge *)
- NOT NameIsNumber 303 (* Command isn't being addressed to Sulu *)
- PrintMessage 106 (* Spock: You should address appropriate person. *)
- PrintMessage 107 (* Spock redirects command to Sulu for you. *)
- RedirectTo WARP $NOUN$
- END_COMMAND
-
- COMMAND ANYBODY, WARP ANY
- RedirectTo WARP $NOUN$
- END_COMMAND
-
- The first of the above will be tried for any player command that has been
- addressed to a Creature, no matter what the command is. For example, this
- command will be tried if the player enters SPOCK, FOLLOW ME or SULU, WARP 12.
- However, it would not be tried if the player did not direct his command to
- anyone, i.e., it would not be tried if the player simply inputs WARP 12
- without addressing it to a specific creature. This first meta-command simply
- tests that the Creature being addressed in the command is at the current
- location and prints a "error" message if the creature isn't there.
-
- The second and third meta-commands above are tried whenever a player addresses
- his command to a Creature (any Creature, however) and the command is to WARP
- something. The second meta-command checks if the creature being addressed is
-
- 74
-
- Sulu, and if it isn't -- gives an "error" message and redirects the command to
- Sulu. The third meta-command would only be tried if the player input SULU,
- WARP Something. This meta-command simply redirects the command to WARP
- Something, as if the command had not been addressed to anyone.
-
- These WARP Something meta-commands would be defined in the .CMD file as
- follows:
-
- COMMAND WARP ANY
- NOT AtLocation 114 (* NOT On Enterprise's Bridge *)
- PrintMessage 108 (* Spock: "$VERB$ $NOUN$" is inappropriate here. *)
- DoneWithTurn
- END_COMMAND
-
- COMMAND WARP ANY
- NounToVariable 1 (* Convert Noun to Variable number 1 *)
- VariableGT 1 12
- OR
- VariableLT 1 1
- PrintMessage 109 (* The Enterprise can only travel at warp 1 to 12. *)
- DoneWithTurn
- END_COMMAND
-
- COMMAND WARP ANY
- FlagOFF 1 (* Course has not been plotted yet *)
- PrintMessage 110 (* Sulu: What course to plot first, Captain?. *)
- DoneWithTurn
- END_COMMAND
-
- COMMAND WARP ANY
- FlagON 1 (* Course has been plotted already *)
- PrintMessage 111 (* Sulu: Going to warp factor $NOUN$. *)
- DoneWithTurn
- END_COMMAND
-
- The first three of the above meta-commands check for various "error"
- conditions and give "error" messages if appropriate. Specifically, the first
- meta-command tests if the player is not on the Bridge; the second tests if the
- warp speed is outside the acceptable range; and the third tests that a course
- has already been plotted. Only if none of these "error" conditions are met,
- would the fourth meta-command tell that player that the Enterprise was going
- to the indicated warp speed.
-
- There are only two more meta-commands required in order for the scene to work
- as shown at the start of this section. These meta-commands are both for the
- situation where the play enters a command to PLOT A COURSE TO Somewhere:
-
- COMMAND PLOT COURSE FOR ANY
- NOT AtLocation 114 (* NOT On Enterprise's Bridge *)
- PrintMessage 108 (* Spock: "$VERB$ $NOUN$" is inappropriate here. *)
- DoneWithTurn
- END_COMMAND
-
-
-
-
-
-
-
- 75
-
- COMMAND PLOT COURSE FOR ANY
- TurnFlagON 1 (* Course has now been plotted *)
- DropIt 201 (* Put plotted course on Navigator's console *)
- PrintMessage 112 (* Sulu: Plotting course for $OBJECT$. *)
- DoneWithTurn
- END_COMMAND
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 76
-
-
- APPENDIX A: STANDARD LEVEL VERBS UNDERSTOOD BY AGT
-
-
- Meanings of notation:
- [required word]
- {optional word}
- | (means OR, i.e., alternative words)
-
- Verbs that do not require nouns
- ===============================
- N,S,E,W,NE,NW,SE,SW,U,D,
- NORTH,SOUTH,EAST,WEST,NORTHEAST,NORTHWEST,SOUTHEAST,SOUTHWEST,UP,DOWN
- ENTER | GO [IN | INTO]
- EXIT | LEAVE (* directions *)
-
- SCORE (* display score and status *)
- QUIT | Q (* end game *)
- INVENTORY | I (* list things player is carrying and wearing *)
- SCREAM | SHOUT | YELL (* make noise but seldom accomplish anything *)
- WAIT (* waste a turn *)
- BRIEF | VERBOSE (* change description mode *)
- L | LOOK (* repeat full description *)
- SAVE | RESTORE {GAME} (* save and restore game status *)
- HELP | H (* ask for help *)
- SCRIPT (* Echo all output to both printer (LP1:) and screen *)
- UNSCRIPT (* Send all output to screen only *)
-
- Verbs that do require nouns (and perhaps objects)
- =================================================
- LIST | SHOW [EXITS] (* list visible exits *)
- THROW | CAST | DUMP [noun]
- {[AT | TO | IN | INTO | ACROSS | INSIDE] [noun]}
- ATTACK | KILL | FIGHT | HIT [creature] {[WITH] [noun]}
- DROP | PUT DOWN [noun | ALL]
- GET | TAKE | PICK UP [noun | ALL]
- OPEN [noun] {[WITH] [noun]}
- CLOSE | SHUT [noun]
- LOCK [noun] {[WITH] [noun]}
- UNLOCK [noun] {[WITH] [noun]}
- EXAMINE | CHECK | INSPECT | LOOK AT | LOOK IN [noun]
- (* synonym is "." or "EX" *)
- READ [noun]
- EAT [noun]
- DRINK [noun]
- PUT | PLACE [noun]
- [IN | WITH | INSIDE | INTO | NEAR | BEHIND | BESIDE |
- ON | UNDER] [noun]
- PUSH | TOUCH [noun] {[WITH] [noun]}
- TURN [noun] {ON | OFF}
- TURN {ON | OFF} [noun]
- PULL [noun]
- PLAY {WITH} [noun]
- LIGHT [noun]
- EXTINGUISH | PUT OUT [noun] (* synonym is "EXT" *)
- SHOOT | FIRE [noun] [AT] [creature]
- SHOOT | FIRE [creature] [WITH] [noun]
- PUT ON | WEAR [noun | ALL]
-
- 77
-
- TAKE OFF | REMOVE [noun | ALL]
- ASK [creature] [ABOUT] [noun]
- TALK [TO | WITH] [creature] {[ABOUT] [noun]}
- TELL [creature] [ABOUT] [noun]
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 78
-
- APPENDIX B: META-COMMANDS CONDITIONAL TESTS
-
-
- *********************** PLAYER CONDITIONS ******************************
- Number/Types
- TOKEN NAME Of Parameters Explanation
- ==================== ============= =========================================
- AtLocation 1 Location# Player is located at room Location#
- AtLocationGT 1 Location# Player is in room greater than Location#
- AtLocationLT 1 location# Player is in room less than Location#
- FirstVisitToRoom 0 None First visit to current room
- IsCarryingSomething 0 None Player is carrying something
- IsCarryingNothing 0 None Player is carrying nothing
- IsCarryingTreasure 1 Points# Player is carrying at least one item
- that is worth at least Points#
- IsWearingSomething 0 None Player is wearing something
- IsWearingNothing 0 None Player is wearing nothing
- LoadWeightEquals 1 Number Player's load weighs equals Number
- LoadWeightGT 1 Number Player's load weighs more than Number
- LoadWeightLT 1 Number Player's load weighs less than Number
- NewLife 0 None Player has just been resurrected or
- start of game
-
- *********************** ITEM(S) CONDITIONS *****************************
- Number/Types
- TOKEN NAME Of Parameters Explanation
- ==================== ============= =========================================
- Present 1 Item# Item# is in room, carried or worn
- IsWearing 1 Item# Item# is being worn
- IsCarrying 1 Item# Item# is being carried
- IsNowhere 1 Item# Item# is located NOWHERE (room 0)
- IsSomewhere 1 Item# Item# is located somewhere (not in 0)
- InRoom 1 Item# Item# is located in current room
- IsLocated 2 Item# Loc# Item# is located in room Location#
- Together 2 Itm1# Itm2# Itm1# and Itm2# are in same place
- IsON 1 Item# Item# is ON
- IsOFF 1 Item# Item# is OFF
- IsOpen 1 Item# Item# is Open
- IsClosed 1 Item# Item# is Closed
- IsLocked 1 Item# Item# is Locked
- IsUnLocked 1 Item# Item# is UnLocked
- IsEdible 1 Item# Item# is Edible
- IsDrinkable 1 Item# Item# is Drinkable
- IsPoisonous 1 Item# Item# is Poisonous
- IsMovable 1 Item# Item# is Movable
- IsGroupMember 1 Item# Item# is a member of the group
-
-
-
-
-
-
-
-
-
-
-
-
-
- 79
-
- ************************ NOUN CONDITIONS *******************************
- Number/Types
- TOKEN NAME Of Parameters Explanation
- ==================== ============= =========================================
- NOUNPresent 0 None NOUN is in room, carried or worn
- NOUNIsWearing 0 None NOUN is being worn
- NOUNIsCarrying 0 None NOUN is being carried
- NOUNIsNowhere 0 None NOUN is located NOWHERE (room 0)
- NOUNIsSomewhere 0 None NOUN is located somewhere (not in room 0)
- NOUNInRoom 0 None NOUN is located in current room
- NOUNIsLocated 1 Location# NOUN is located in room Location#
- NOUNIsON 0 None NOUN is ON
- NOUNIsOFF 0 None NOUN is OFF
- NOUNIsOpen 0 None NOUN is Open
- NOUNIsClosed 0 None NOUN is Closed
- NOUNIsLocked 0 None NOUN is Locked
- NOUNIsUnLocked 0 None NOUN is UnLocked
- NOUNIsEdible 0 None NOUN is Edible
- NOUNIsDrinkable 0 None NOUN is Drinkable
- NOUNIsPoisonous 0 None NOUN is Poisonous
- NOUNIsMovable 0 None NOUN is Movable
- NOUNpointsEquals 1 Number NOUN's points equal Number
- NOUNpointsGT 1 Number NOUN's points are greater than Number
- NOUNpointsLT 1 Number NOUN's points are less than Number
- NOUNweightEquals 1 Number NOUN's weight equals Number
- NOUNweightGT 1 Number NOUN's weight is greater than Number
- NOUNweightLT 1 Number NOUN's weight is less than Number
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 80
-
-
- ******************** MISCELLANEOUS CONDITIONS **************************
- Number/Types
- TOKEN NAME Of Parameters Explanation
- ==================== ============= =========================================
- NamePresent 0 None Addressee is present in current room
- NameIsNumber 1 Number Addressee is Creature or Noun number
- LightPresent 0 None Current room has necessary light
- RoomNeedsLight 0 None Current room needs a light
- FlagON 1 Flag# Flag# is ON
- FlagOFF 1 Flag# Flag# is OFF
- ScoreEquals 1 Number Current score is equal to Number
- ScoreGT 1 Number Score is greater than Number
- ScoreLT 1 Number Score is less than Number
- NumberEquals 1 Number Number input is equal to Number
- NumberGT 1 Number Number is greater than Number
- NumberLT 1 Number Number is less than Number
- AnswerIsCorrect 0 None Last answer was correct
- AnswerIsWrong 0 None Last answer was wrong
- TurnsEquals 1 Number Number of turns is equal to Number
- TurnsGT 1 Number Number of turns is greater than Number
- TurnsLT 1 Number Number of turns is less than Number
- CounterEquals 2 Ctr# Number Counter# is equal to Number
- CounterGT 2 Ctr# Number Counter# is greater than Number
- CounterLT 2 Ctr# Number Counter# is less than Number
- VariableEquals 2 Var# Number Variable# is equal to Number
- VariableGT 2 Var# Number Variable# is greater than Number
- VariableLT 2 Var# Number Variable# is less than Number
- CompareVariables 2 Var#1 Var#2 Variable#1 is less than Variable#2
- VariableChance 2 Var# Number Variable# is less than a random number
- from 1 to Number
- Chance 1 Percent Odds percent, i.e., 10 % chance of TRUE
- PromptForYES 0 None Prompts for Y or N -- TRUE if Yes
- PromptForNO 0 None Prompts for Y or N -- TRUE if No
- VerbIsDirection 0 None Verb is movement or direction
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 81
-
-
- APPENDIX C: META-COMMANDS ACTION TOKENS
-
-
- ********************** PLAYER ACTION TOKENS ********************************
- Number/Types
- TOKEN NAME Of Parameters Explanation
- ==================== ============= =========================================
- GoToRoom 1 Location# Send player to Location#
- GoToRandomRoom 2 Loc#1 Loc#2 Randomly pick a room between Loc#1 and
- Loc#2 and send player to it
- GetIt 1 Item# Item# is now being carried
- WearIt 1 Item# Item# is now being worn
- DropIt 1 Item# Drop Item# into current room
- RemoveIt 1 Item# Remove Item# and drop into room
- GetNOUN 0 None NOUN is now being carried
- WearNOUN 0 None NOUN is now being worn
- DropNOUN 0 None Drop NOUN into current room
- RemoveNOUN 0 None Remove NOUN and drop into room
- DropEverything 0 None Drop all items being carried
- RemoveEverything 0 None Remove all items being worn
- KillPlayer 0 None Make player dead at end of turn
-
-
- ******************* ITEM/NOUN/LOCATION ACTION TOKENS ***********************
- Number/Types
- TOKEN NAME Of Parameters Explanation
- ==================== ============= =========================================
- PutInCurrentRoom 1 Item# Put Item# in current room
- PutNOUNInCurrentRoom 0 None Put NOUN in current room
- SendToRoom 2 Item# Loc# Put Item# in room Location#
- SendNOUNToRoom 1 Location# Put NOUN in room Location#
- SendAllToRoom 1 Location# Send all carried items to Location#
- SendTreasuresToRoom 2 Loc# Point# Send all carried items whose
- points > Point# to Loc#
- Destroy 1 Item# Item# is now NOWHERE (in room 0)
- DestroyNOUN 0 None NOUN is now NOWHERE (in room 0)
- SwapLocations 2 Itm#1 Itm#2 Swap locations of Item#1 & Item#2
- SendToItem 2 Itm#1 Itm#2 Put Itm#1 in location of Itm#2
- SendNOUNToItem 1 Item# Put NOUN in location of Item#
- OpenIt 1 Item# Item# is now open
- CloseIt 1 Item# Item# is now closed
- LockIt 1 Item# Item# is now locked
- UnlockIt 1 Item# Item# is now unlocked
- OpenNOUN 0 None NOUN is now open
- CloseNOUN 0 None NOUN is now closed
- LockNOUN 0 None NOUN is now locked
- UnlockNOUN 0 None NOUN is now unlocked
- AddToGroup 1 Item# Adds Item# to group
- RemoveFromGroup 1 Item# Removes Item# from group
- MoveGroup 1 Location# Move group to Location#
-
-
-
-
-
-
-
-
- 82
-
- ******************* MISCELLANEOUS ACTION TOKENS ****************************
- Number/Types
- TOKEN NAME Of Parameters Explanation
- ==================== ============= =========================================
- ShowScore 0 None Show current SCORE
- PlusScore 1 Number Add Number to current SCORE
- MinusScore 1 Number Subtract Number from current SCORE
- ShowInventory 0 None Show current INVENTORY
- WaitForReturn 0 None Print 'Hit RETURN' message and wait
- TimePasses 0 None Show 'Time passes...' message
- Delay 1 Number Delay for Number seconds
- ClearScreen 0 None Clear screen
- DescribeThing 1 Number Describe thing Number (whatever)
- LookAtRoom 0 None Cause a VERBOSE look at room
- Tone 2 Hz Ms Makes a tone on speaker of Hz Hertz (440
- Hertz = A on piano) for Ms milliseconds
- PrintMessage 1 Number Print message Number in .MSG file
- RandomMessage 2 Num1 Num2 Randomly picks a message from Num1 to
- Num2 in .MSG file and prints it
- BlankLine 0 None Print a blank line
- GetNumberInput 2 Num1 Num2 Prompt for player to input a Number
- where Num1 <= Number <= Num2.
- If Num1=Num2, then no range will be
- given in prompt.
- AskQuestion 1 Question# Ask and get answer to question#
- ChangePassageway 2 Dir# Loc# Create or close a passageway
- from current_room to Loc# via Dir#.
- Dir# = 1 = north ... Dir # = 12 = exit.
- If Loc# = 0 then closes passageway.
- If Loc# <> 0 then opens passageway
- to room Loc# via direction Dir#.
- Passageways are opened or closed at
- both ends simultaneously!
- TurnFlagON 1 Flag# Turn Flag# ON
- TurnFlagOFF 1 Flag# Turn Flag# OFF
- ToggleFlag 1 Flag# Toggle Flag#
- TurnCounterON 1 Counter# Turn Counter# ON -- sets to 1
- TurnCounterOFF 1 Counter# Turn Counter# OFF -- sets to 0
- SetVariableTo 2 Var# Number Set Variable Var# to Number
- AddToVariable 2 Var# Number Add Number to Var#
- SubtractFromVariable 2 Var# Number Subtract Number from Var#
- AddVariables 2 Var#1 Var#2 Add Var#2 and Var#1 and put answer
- into Var#1
- SubtractVariables 2 Var#1 Var#2 Subtract Var#2 from Var#1 and put answer
- into Var#1
- RandomVariable 2 Var# Number Set Var# to a random value between 1 and
- Number
- NounToVariable 1 Var# Set Var# to value of noun
- ObjectToVariable 1 Var# Set Var# to value of object
- WinGame 0 None Player wins game at end of turn
- EndGame 0 None Game ends at end of turn
- QuitThisCMD 0 None Quit evaluating this CMD
- QuitAllCMDs 0 None Finished with all meta-commands
- DoneWithTurn 0 None All Done this turn -- get input next
- ReDirectTo 0 None See explanation in manual.
-
-
-
-
- 83
-
-
- APPENDIX D: AGT ERROR MESSAGES
-
-
- ERRORS DURING GAME COMPILATION
- ------------------------------
- Error: "VERB is not a valid verb" -- VERB is not a standard AGT verb, nor has
- it been defined (so far) as a synonym for another verb. This error is in the
- *.DAT file.
-
- Error: ">>> Ignored: ASCII text" -- ASCII text encountered during reading of
- *.DAT file. Text does not correspond to anything normally expected in this
- file. Probably, just a comment by the game designer.
-
- Error: "FOR COMMAND VERB NOUN OBJECT -- MAXIMUM DATA SIZE" -- This
- meta-command is too big. i.e., too many conditions and actions. Break into
- two separate commands for VERB NOUN OBJECT. One COMMAND right after the
- other. This is a game designer error.
-
- Error: "Too many commands -- Processing halted" -- AGT only allows 400
- meta-commands. The current meta-command being read from the *.CMD file would
- have been number 401. This is a game designer error.
-
- Error: "FOR COMMAND VERB NOUN OBJECT -- ILLEGAL VERB" -- This meta-command
- has a VERB which the parser does not recognize as a standard AGT verb, a
- custom verb or a synonym for a valid verb. This is a game designer error.
-
- Error: "FOR COMMAND VERB NOUN OBJECT -- ILLEGAL NOUN or OBJECT" -- This
- meta-command has a NOUN or OBJECT which the parser does not recognize as a
- standard AGT noun or a synonym for a valid noun. This is a game designer
- error.
-
- Error: "FOR COMMAND VERB NOUN OBJECT -- ILLEGAL TOKEN" -- This meta-command
- has something in it that the program does not recognize as a token. Probably,
- a game designer comment or a spelling mistake.
-
-
- ERRORS DURING RESTORING GAME
- -------------------------
- Error: "File not found, can't restore FileName" -- FileName is not on disk.
-
-
- ERRORS DURING GAME PLAY
- -----------------------
- Error: "I don't understand VERB as a verb." -- Try another VERB. Probably a
- spelling mistake.
-
- Error: "I don't understand NOUN as a noun." -- Try another word to identify
- this noun. May be a noun that does not really play a significant part in the
- game, i.e., something described in general in the room description, but not a
- separate object in the room. May also be a spelling mistake.
-
- Error: "I don't understand PREP as a preposition." -- Try another preposition.
- May be a spelling mistake.
-
- Error: "I don't understand OBJECT as the object of a preposition." -- Try
- another word to identify this noun. May be a noun that does not really play a
- significant part in the game, i.e., something described in general in the room
-
- 84
-
- description, but not a separate object in the room. May also be a spelling
- mistake.
-
- Error: "Which NOUN do you mean, the ADJ1 NOUN or the ADJ2 NOUN?" -- Two or
- more nouns with the same name are present in the current room. Specify the
- one you mean by some phrase that includes the appropriate NOUN's adjective.
-
- Error :"I don't understand WORD as either a verb or a noun". Try another word
- to convey what you mean. May be a spelling mistake.
-
- Error: "You need a preposition and an object whenever you try to VERB a NOUN."
- Some verbs require prepositions and objects in order to work properly. For
- example, PLACE BOOK ON THE TABLE is fine, but PLACE BOOK by itself will
- generate this error.
-
- Error: "Too many words in command". AGT allows for a maximum of 12 words in
- each part of a compound command (i.e., between AND's and THEN's). Re-phrase
- your command to be more succinct.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 85
-
-
- APPENDIX E: VALUE RANGES FOR GAME DEFINITIONS
-
-
- The following are the valid ranges of numbers for nouns, rooms, and creatures.
- DO NOT assign improper numbers to any category, or you will experience
- unpredictable (but consistently erroneous) results.
-
- Player Carrying: 1
- Player Wearing: 1000
- ROOMS: 2 to 199
- NOUNS: 200 to 299
- CREATURES: 300 to 399
-
- In addition, if the game designer is also using meta-commands, then the
- following valid ranges are appropriate:
-
- FLAGS 1 to 255
- COUNTERS 1 to 9
- VARIABLES 1 to 9
- QUESTIONS 1 to 9
- MESSAGES 1 to 250
- META-COMMANDS 1 to 400
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 86
-
-
- APPENDIX F: ABOUT THE AUTHORS
-
-
- Mark J. Welch is a 1983 graduate of the University of Massachusetts at Amherst
- [journalism/interdisciplinary (computer science)]. He worked as an editor,
- writer, and reporter for BYTE and InfoWorld until August 1986, when he began
- studies at the Boalt Hall School of Law of the University of California in
- Berkeley. He is co-author of a syndicated column of computer reviews for
- lawyers, published weekly in legal newspapers across the nation. He also
- continues to write reviews and other articles for several publications.
-
- In addition to games of all types, he is interested in law, programming
- languages, politics, applications software, and technology in general. He is
- just skilled enough at darts and juggling to embarrass (and possibly injure)
- himself and those nearby.
-
-
- David Malmberg has been active in the world of personal computer since 1977.
- He is the author or co-author of five published software products.
-
- His most successful products were the Turtle Graphics series published by
- HESware. These two programs have sold over 80,000 copies world-wide, been
- translated into Spanish, and won two Consumer Electronic Software Showcase
- awards as some of the best software of 1983. These programs are widely used
- in schools to teach computer literacy to children and other computer novices.
-
- Dave has also published numerous articles and programs in a computer
- magazines. He has been a Contributing Editor of both COMPUTE!'s HOME &
- EDUCATIONAL COMPUTING and MICRO magazines. He was one of the principal
- authors of COMPUTE!'s FIRST BOOK OF VIC, the best selling computer book of
- 1983. He has written regular columns on educational uses of computers and on
- LOGO for COMMODORE and POWER/PLAY magazines.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 87
-